Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Kmitání obvodu

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Řešení problémů s různými konstrukcemi
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Nikeed12



Založen: Sep 11, 2014
Příspěvky: 45

PříspěvekZaslal: ne říjen 26 2014, 12:15    Předmět: Kmitání obvodu Citovat

Zdravím, navrhl jsem si takový jednoduchý obvod s AVRkem a mám problém s tím, že když naprogramuji procesor aby reagoval na stisk tlačítka (JUM1, JUM2) tak vystupy které chci pomocí tlačítka sepnou začnou kmitat (T1-T3). Přitom si myslím že jsem udělal vše proto aby se obvod nerozkmital (SMD kondíky 100 nF na vstupu i výstupu 7805 a nejblíže k napájení AVRka a 2 elektrolyty na vstupu 220uF a výstupu 100uF 7805ky).

Když se rukou přiblížím k obvodu tak se mění frekvence kmitání výstupu a když prstem jak kdyby zkratuji vstup napájení (svorkovnice K1) tak kmitání přestane, zkoušel jsem na svorkovnici dát kondík 1000uF ale problém přetrvává.
Nevíte kde by mohl být problém ?
(jinak součástky které mají nezapojené vývody jsou spojené polygonem k zemi)



Výstřižek.PNG
 Komentář:

Stáhnout
 Soubor:  Výstřižek.PNG
 Velikost:  73.32 kB
 Staženo:  105 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: ne říjen 26 2014, 13:11    Předmět: Citovat

Hledat na DPS bez schematu zapojení je opravdu zážitek.

Přidej na 5V nějakou zátěž, aby přes stabilizátor teklo alespoň 5mA (třeba ledka plus odpor, nějakej náznak tam vidím)

Definuj rozepnutý stav tlačítek nějakým odporem.

_________________
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
Nikeed12



Založen: Sep 11, 2014
Příspěvky: 45

PříspěvekZaslal: ne říjen 26 2014, 13:36    Předmět: Citovat

na tom zapojení nic není, je to v podstatě jen attiny25 s posílenými 3 vystupy pomocí tranzistoru a 2 tlačítka....
Jinak jsem našel problém v tom, že nějak nefunguje interní pull-up rezistor přitom v programu ho mám zaplý, s externím pull-upem to funguje...

DDRB = 0b111100; //PB3,4,7 vystupní, PB0,1 vstupní
PORTB = 0b000011; // pull-up na PB0,1

jinak zde je schéma, já vím je to prasácky nakreslené, ale to není tématem diskutování Smile



Výstřižek1.PNG
 Komentář:

Stáhnout
 Soubor:  Výstřižek1.PNG
 Velikost:  35.14 kB
 Staženo:  164 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
WLAB



Založen: Sep 13, 2005
Příspěvky: 867
Bydliště: Praha

PříspěvekZaslal: ne říjen 26 2014, 15:05    Předmět: Citovat

Tipnul bych si, ze kdyz ridis ty tranzitory, prepisujes na portu B i ty spodni bity, co ridi (v rezimu vstupu) pull-upy a vypinas je....
_________________
de omnibus dubitandum est
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Nikeed12



Založen: Sep 11, 2014
Příspěvky: 45

PříspěvekZaslal: ne říjen 26 2014, 15:55    Předmět: Citovat

Typl sis správně, díky Smile je to lepší , ale stejně ta ledka trošičku svítí a když prstem zkratuji piny tlačítka tak se rozsvěcuje více Sad , ještě nejaké nápady nebo budu muset použít externí pull-up ? (čemuž bych se rád vyhnul)

if (bit_is_clear(PINB,0))
{
PORTB=0b001011;
}
else
{
PORTB=0;
}

jinak na bázi tranzistoru je odpor o hodnotě 4K7
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
WLAB



Založen: Sep 13, 2005
Příspěvky: 867
Bydliště: Praha

PříspěvekZaslal: ne říjen 26 2014, 16:08    Předmět: Citovat

Ledka? Ta co je ve schematu? Ta by snad mela svitit furt, ne? Leda by odpor u ni byl nejak moc veliky a prilozenim prstu se snizil....

Co ma delat ten usek programu? Furt tam vypinas pull-upy (PORTB=0).
PortB se neda ovladat po bitech? Pak je jedina rozumna vec delat read-modify-write operace...

tj. neco ve smyslu>


PORTB = (PORTB & ~mask) | mask;

kde mask je promenna s bitovou maskou bitu, ktery se ma zapnout, nebo 0 pokud se zapnout nema.

_________________
de omnibus dubitandum est
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Nikeed12



Založen: Sep 11, 2014
Příspěvky: 45

PříspěvekZaslal: ne říjen 26 2014, 16:22    Předmět: Citovat

No jasné, já jsem ale kus cipa Very Happy když byl vystup seplý tak jsem měl pull-up zaplé, ale jak jsem je vypínal tak jsem vypl i pull-up, díky moc Smile už to funguje jak má.

jinak LEDku jsem měl zapojenou na výstup tranzistoru, to jsem nezmínil omlouvám se Embarassed
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Nikeed12



Založen: Sep 11, 2014
Příspěvky: 45

PříspěvekZaslal: ne říjen 26 2014, 21:22    Předmět: Citovat

Ještě bych potřeboval (pro vás jistě drobnost) a abych nemusel zakládat nové téma tak to napíšu sem.

Mám proměnnou int a a potřeboval bych,aby se ta hodnota uložila do eeprom paměni a po vypnutí a zapnutí napájení opět načetla do proměnné , hledal jsem ale vubec tomu nerozumím tak kdyby byl někdo ochotný mi pomoci tak bych mu byl vděčný Embarassed

(MCU attiny25)

V datasheetu jsem našel tohle, ale nevím jak to použít a jestli to vůbec je to co potřebuji:
kód:

unsigned char EEPROM_read(unsigned char ucAddress)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEPE))
;
/* Set up address register */
EEAR = ucAddress;
/* Start eeprom read by writing EERE */
EECR |= (1<<EERE);
/* Return data from data register */
return EEDR;
}


kód:

void EEPROM_write(unsigned char ucAddress, unsigned char ucData)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEPE))
;
/* Set Programming mode */
EECR = (0<<EEPM1)|(0<<EEPM0);
/* Set up address and data registers */
EEAR = ucAddress;
EEDR = ucData;
/* Write logical one to EEMPE */
EECR |= (1<<EEMPE);
/* Start eeprom write by setting EEPE */
EECR |= (1<<EEPE);
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
WLAB



Založen: Sep 13, 2005
Příspěvky: 867
Bydliště: Praha

PříspěvekZaslal: ne říjen 26 2014, 23:39    Předmět: Citovat

Pouzit by to melo jit. Moc se mi ale nelibi, ze zapisova funkce zapisuje bez toho, aby se podivala jestli uz tam ta hodnota nahodou neni zapsana.... Akorat ten int musis ulozit jako dva chary...

Pokud bys pouzival treba codevision kompilator, tak ten ma pametovou tridu eeprom (coz je asi jedine jeho pozitivum) a nemusi se nic resit. zalohovaci promenna se tam vytvori nejak takto:
eeprom int backup_xyz;


Abys do te eepromky nezapisoval zbytecne, musis nejak vhodne detekovat blizici se vypnuti a data zapsat.

_________________
de omnibus dubitandum est
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Nikeed12



Založen: Sep 11, 2014
Příspěvky: 45

PříspěvekZaslal: po říjen 27 2014, 0:04    Předmět: Citovat

už si tu s tím 4 hodiny hraju ale bez úspěchu, splácal jsem tohle, nejspíše to je úplná blbost, ale nemůžu najít žádný návod kterému bych rozuměl...
Jak tu proměnnou int uložím jako 2x char ? zjistil jsem že tu proměnou mužu mít i v charu, takže tím by se to zjednodušilo pokud se nemýlím.
jinak používám winavr překladač.

Potřebuji tu promněnou zapisovat při každé její zmněně, takže jsem to přiřadil k tlačítku, které bude zmáčknuto max 3x za den.
Vím že to je hodně lidem proti srtsi, ale hodně by mi pomohlo kdyby mi někdo ten kod napsal, protože ze slovního popisu to asi nikdy nedám dohromady Confused
kód:

int main()
{

 DDRB =  0b111100;
 PORTB = 0b000011;
 
char a=0;
char k;

 k= EEPROM_read(0);
 if (k!=0xff)
 {
  EEPROM_write(a,a);
 }

 for(;;)
 {

  if (bit_is_clear(PINB,0))
   {
     EEPROM_write(a,a);
   }
}
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
stanleyv



Založen: Jan 21, 2007
Příspěvky: 123
Bydliště: Trnava

PříspěvekZaslal: po říjen 27 2014, 6:38    Předmět: Citovat

A kde sa ti mení to a, lebo inak nevidím zmysel tam stále do EPROMky zapisovať 0.....

EDIT: Ak by sa ti to a menilo niekde v kóde, ktorý tu nie je, tak potom nemôžeš mať aj adresu aj dáta ako a, pretože ti to bude ukladať stále na iné miesto v EPROMke. Adresu daj buď surovo 0, alebo si zvoľ premennú (napr: eadr=0 )a uprav zápis na EEPROM_write(eadr,a);
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Nikeed12



Založen: Sep 11, 2014
Příspěvky: 45

PříspěvekZaslal: po říjen 27 2014, 7:16    Předmět: Citovat

Mám už nějaký program kde se promněná a mění, jen mi přišlo zbytečné zde vypisovat celý program, když to co mám napsané funguje podle mých představ, jediné co potřebuji je ten zápis a čtení z EEPROM.
S tou adresou jsem to taky zkoušel, vyzkoušel jsem snad uplně všechno. Pro uplnost zde dávám program co zatím mám, i když si myslím že to není duležité k tomu v čem potřebuji poradit Smile
¨
Jinak podle mě je problém s tím, že nevím jak poprvé do eeprom zapsat tu promněnou, respektive jak při programování flash paměti naprogramuji i eeprom tak, aby proměnná a=0 ?


kód:

#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>

#define barva1 0b000111 //r
#define barva2 0b001011 //g
#define barva3 0b010011 //b

#define barva4 0b010111 //r+b
#define barva5 0b011011 //b+g
#define barva6 0b001111 //g+r
#define barva7 0b011111 //white
#define cas 250


void EEPROM_write(unsigned char ucAddress, unsigned char ucData)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEPE))
;
/* Set Programming mode */
EECR = (0<<EEPM1)|(0<<EEPM0);
/* Set up address and data registers */
EEAR = ucAddress;
EEDR = ucData;
/* Write logical one to EEMPE */
EECR |= (1<<EEMPE);
/* Start eeprom write by setting EEPE */
EECR |= (1<<EEPE);
}




unsigned char EEPROM_read(unsigned char ucAddress)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEPE))
;
/* Set up address register */
EEAR = ucAddress;
/* Start eeprom read by writing EERE */
EECR |= (1<<EERE);
/* Return data from data register */
return EEDR;
}



void red (void)
{
PORTB=barva1;

 }

 void green(void)
{
PORTB=barva2;

 }

  void blue(void)
{
PORTB=barva3;

 }
void purple (void)
{
PORTB=barva4;

 }

 void yellow (void)
{
PORTB=barva5;

 }

  void cyan(void)
{
PORTB=barva6;

 }
 void white (void)
{
PORTB=barva7;

 }


int main()
{

 DDRB =  0b111100;
 PORTB = 0b000011;
 
char a=0;
int k;


 k= EEPROM_read(0);

 if (k==0xff)
 {
EEPROM_write(0,a);
 }

 for(;;)
 {

if (bit_is_clear(PINB,0))
{

EEPROM_write(0,a);

if (a==0)
  {
   red();
   a=1;
   _delay_ms(cas);
  }

 else  if (a==1)
  {
   green();
   a=2;
   _delay_ms(cas);
  }

  else if (a==2)
  {
   blue();
   a=3;
   _delay_ms(cas);
  }

    else if (a==3)
  {
   purple();
   a=4;
   _delay_ms(cas);
  }

     else if (a==4)
  {
   yellow();
   a=5;
   _delay_ms(cas);
  }

     else if (a==5)
  {
   cyan();
   a=6;
   _delay_ms(cas);
  }

     else if (a==6)
  {
   white();
   a=7;
   _delay_ms(cas);
  }

     else if (a==7)
  {
   PORTB=0b000011;
   a=0;
   _delay_ms(cas);
  }
 
 
}

}
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Řešení problémů s různými konstrukcemi Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.20 sekund