Zaslal: ne říjen 26 2014, 12:15 Předmět: Kmitání obvodu
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)
Založen: Jul 21, 2006 Příspěvky: 25741 Bydliště: skoro Brno
Zaslal: ne říjen 26 2014, 13:11 Předmět:
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[?]
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...
Založen: Sep 13, 2005 Příspěvky: 867 Bydliště: Praha
Zaslal: ne říjen 26 2014, 15:05 Předmět:
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
Typl sis správně, díky 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 , 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;
}
Založen: Sep 13, 2005 Příspěvky: 867 Bydliště: Praha
Zaslal: ne říjen 26 2014, 16:08 Předmět:
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
No jasné, já jsem ale kus cipa 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 už to funguje jak má.
jinak LEDku jsem měl zapojenou na výstup tranzistoru, to jsem nezmínil omlouvám se
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ý
(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);
}
Založen: Sep 13, 2005 Příspěvky: 867 Bydliště: Praha
Zaslal: ne říjen 26 2014, 23:39 Předmět:
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
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
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);
}
}
}
Založen: Jan 21, 2007 Příspěvky: 123 Bydliště: Trnava
Zaslal: po říjen 27 2014, 6:38 Předmět:
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);
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
¨
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 ?
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
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.