Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
WinAVR / GCC alapszabályok:
1. Ha ISR-ben használsz globális változót, az legyen "volatile"
2. Soha ne érjen véget a main() függvény
3. UART/USART hibák 99,9% a rossz órajel miatt van
4. Kerüld el a -O0 optimalizációs beállítást minden áron
5. Ha nem jó a _delay időzítése, akkor túllépted a 65ms-et, vagy rossz az optimalizációs beállítás
6. Ha a PORTC-n nem működik valami, kapcsold ki a JTAG-et
Bővebben: AVR-libc FAQ
Lapozás: OK   455 / 840
(#) TavIR-AVR válasza blackdog hozzászólására (») Júl 8, 2012 /
 
A sima print/input elég kell hogy legyen...

Ipari 485: ModBus, FiledBus.
Ez van arduino es Bascom alatt is (tuti C alatt is).
(#) zombee válasza blackdog hozzászólására (») Júl 8, 2012 /
 
Szerintem a Te feladatod nem olyan bonyolult. Egy kicsit programozni kell, de lehet hogy sokkal
hamarabb megvan mintha valami idegen kódot most importálnál a cuccba.

Az RS-485, legalábbis mint fizikai formátum ajánlott, de a program részét, az átviteli protokollt úgy oldod meg ahogy akarod. Ha már kész az RS-485 háló(vezetékek, konverterek, leválasztók), akkor már majdnem kész is vagy! Természetesen az AVR-ekre az USART-ot kell kötni(Rx, Tx), és meg kell határozni a közös átvieli paramétereket is(baud, bitszám, paritás, stb.).

Ezután, ha bármelyik eszköz adatot(egy bájtot) kiküld az USART-on, azt a többi venni fogja, feltéve ha egyszerre csak egy adó megy. Ezt legegyszerűbben egy Master-el tudod elérni, amely egyesével küldi ki az utasításokat a többi, Slave eszköznek. Az utasítás lehet lekérdezés, de küldhetsz adatot is(pl. relé állások). Ezt szintén Te fogod meghatározni hogy hogyan! Ha egy Slave engedélyt kap az adásra akkor leadja az érzékelő információt. Ha a Master egy T idő letelte után sem kapta meg akkor újra próbálkozhat X alkalommal, utána jelez hogy nem elérhető. Természetesen a T és X értéke szintén a fantáziádra van bízva!

Ezen kívül még használnám a CRC-16 ellenőrzőösszeget(de lehet XOR is), az üzenetek végére, úgy, hogy a hibás üzeneteket még a címzett sem veszi figyelembe.
Pontosan: egy üzenet több egymásutáni bájtból áll. Ha fix a hosszuk az leegyszerűsíti a vevő dolgát, és érdemes egy timeout-ot is használni a véletlen zavarok kiszűrésére. Pl. a vonal az idő nagy részében Hi-Z állapotú. Mielőtt a Master, vagy a megszólított Slave adni kezd, egy rövid időre HI állásban tartja a vonalat míg lejár ez a timeout és utána kezdhet adni(Start bit, adat, stb.). Szerintem abszolút nem bonyolult az egész, középiskolai programozástudással bárki 2-4 óra alatt leprogramozná!
(#) blackdog válasza zombee hozzászólására (») Júl 8, 2012 /
 
Bővebben: Link

Ezen cikk alapján próbálok elindulni. Úgy látom ebben a lényeg benne van ami nekem kell. De a későbbiekben lehet szülségem lesz kész protolra. Most is örülnék neki.
(#) zombee válasza blackdog hozzászólására (») Júl 9, 2012 /
 
Szerintem a feladathoz képest kicsit túl van bonyolítva, pontosabban túl univerzális akar lenni,
de ehhez képest eléggé korlátozott felhasználással bír. De ez csak az én véleményem...
Gondolom neked egy univerzális protokoll kell, ahol csak betolod az adatot vagy épp kiveszed..
(#) Ricsi89 hozzászólása Júl 9, 2012 /
 
Sikerült a hétvége folyamán megszüntetnem a km óránál a zavart. A zavar forrása a sima gyújtókábel volt. Lecseréltem zavarszűrősre és már nem mutat hülyeségeket. Most jöhet a többi.
(#) blackdog válasza zombee hozzászólására (») Júl 9, 2012 /
 
Mindenképpen univerzális kell mert nem egyet kell készítenem hanem sokat és nem mindig én fogom telepíteni.
Közben dolgozom rajta és most a Slave eszköz univerzális bővíthetőségével gyűlt meg a bajom. Alapból 4 bemenete és 6 kimenete lenne, de bővíthető kell legyenyen 8 bemenetig és 16 kimeneteig. Igaz nem AVR probléma hanem technikai/kivitelezési ütköző.
Ilyen dobozokba kellene beleférnem: Bővebben: Link
(#) tanulo99 hozzászólása Júl 9, 2012 /
 
Sziasztok!
Ha el*esztem a fuse biteket mit tehetek? Attiny45 usbasp programozó. Külön eszköz kapcsolás nélkül a géppel meg lehet oldani? A gépen Windows 7 meg Windows 8 két másikon.
(#) blackdog válasza tanulo99 hozzászólására (») Júl 9, 2012 /
 
Bővebben: Link
Én is jártam így.
(#) tanulo99 válasza blackdog hozzászólására (») Júl 9, 2012 /
 
De én külső eszköz nélkül gondoltam csak a progizóval meg géppel.
(#) blackdog válasza tanulo99 hozzászólására (») Júl 9, 2012 /
 
Ebben az esetben a külső órajel kell. Más nem keresel progit ami ad neked négyszög jelet vagy talán a szinusz is jó. Bekötöd a kvarc egyik lábára és "ütöd" míg nem sikerül. Nem lesz más megoldás.
(#) tanulo99 válasza blackdog hozzászólására (») Júl 9, 2012 /
 
Akkor holnap elszaladok összedobok egy 555 oszcit. Freki kitöltés mennyi legyen? Vagy mondj már kérlek egy konkrét értéket ellenállásra és kondira.
(#) zombee válasza tanulo99 hozzászólására (») Júl 9, 2012 /
 
Kitöltés 50% körüli, a freki ~1MHz.
Tranzisztoros astabil multivibrátorral ez 2x680Ohm bázisellenállást és 2x1nF kondit jelent(T/2=0.69*R*C).
Az 555 IC szerintem egy vicc, számomra olyan mintha egy IC-tokba bezártak volna 2 darab NPN tranyót.
(#) Ricsi89 válasza zombee hozzászólására (») Júl 10, 2012 /
 
Nekem régebben sikerült 555-össel feléleszteni egy mega8-at.
(#) Zsolt2 hozzászólása Júl 10, 2012 /
 
Sziasztok!
Épitettem egy hőszabályozót Atmega16-al. Ha külön kiprobálom szépen müködik, vizsont ha felteszem a kemencére, akkor majdnem minden kapcsolásnál indul ujra. Előszőr probálkoztam hálozati szűrővel és nagyobb kondival a tápon, de nem segitett. Az órajelet probáltam külső kvarcrol és belső osszcillátorrol is. A kimenete relé, ami egy három-fázisos kontakotrt vezérel.
Szerintetek mi lehet a baja?

Üdv.
Zsolt
(#) vilmosd válasza Zsolt2 hozzászólására (») Júl 10, 2012 /
 
A rele erintkezojere tegyel egy soros RC tagot, ugymint 47 ohm 2 W, valamint 10 nF 275 VAC (X2 kategoria!!!). A kontaktorra pedig egy 400 voltos VDR-t.
(#) pityu_lite hozzászólása Júl 10, 2012 /
 
Sziasztok!

Tudnátok segíteni ? Folyamatos kommunikációt szeretnék megoldani soros vonalon több eszköz között(1 master sok slave) Master kiad egy parancsot és az egyik slave válaszol. A slave eszközökön egy jól működő megszakításos soros kezelés van. A problémám hogy a master kiad egy parancsot, bizonyos időn belül a slave vagy válaszol vagy nem(ilyenkor nincs mondanivaló) , nah ekkor a master új ciklusba lép és egy következő eszközzel kommunikálna és így tovább..

Szóval a probléma az hogy elméletben és csak terminálos tesztekkel jól működik a kommunikáció , de ha elindul a rendszer és másodpercenként ~100 ilyen parancs mozogna a soros vonalon akkor előfordul hogy a master panel egy olyan adatot kap a soros vonalon ami nem az aktuális slave eszköztől jön.
A master pl már 100ms-es timeout-ra van állítva hogy maximum addig várjon a slave eszköztől válaszra-> nem érkezik akkor lép a következő eszközre és mikor ettől az eszköztől várna választ akkor "megérkezik" az előzőtől a válasz. Nah ezt kéne kiküszöbölnöm!

Lenne tippetek? Én most azzal próbálkozom hogy mielőtt az új parancsot kiküldöm a soros vonalra , előtte megpróbálom letakarítani az "úton lévő" adatokat ezzel :

  1. void uart_flush(void)
  2. {
  3. unsigned char dummy;
  4. while(UCSR0A&(1<<RXC0)){dummy=UDR0;}
  5. }


Sajnos ez se nagyon válik be. ritkábban ugyan de előfordul még a probléma. Lenne ötlete valakinek ?
(#) tanulo99 hozzászólása Júl 10, 2012 /
 
Attiny45 visszahozásához jó a 4 megás kvarc? Topi kapcsolását építeném meg mert gondok vannak a fuse bitekkel.
(#) zombee válasza tanulo99 hozzászólására (») Júl 10, 2012 /
 
Szerintem jó lesz. Azon még elfut. Egy minimum 100nF kondit azért ne felejts a táplábakhoz tenni!
(#) tanulo99 hozzászólása Júl 10, 2012 /
 
Megcsináltam a 4c megás kvarccal az újraélesztőt. Egyelőre jó mert az avr-re kötött led ég. Bár nem villog de az egyik ég. Amúgy felváltva kéne villogni. Az jó hogyha a topi kapcsolásában ismertetett oszcinak a végén kb 2,5 volt van? Multival egyen de biztos váltó.
(#) Stefan válasza pityu_lite hozzászólására (») Júl 10, 2012 /
 
Gondolom nem 1-1 bájtról van szó, hanem csomagokról. A slave megvárja amíg a teljes packet átmegy, nem küld előtte valamit, amit a master már elkezd feldolgozni, és ettől valami elcsúszik?
Esetleg még a hiba biteket valahogy figyeld futás közben.
(#) luxmanpower válasza pityu_lite hozzászólására (») Júl 10, 2012 /
 
És mi van ha egyszerre küld egy előző és egy mostani slave? Szerintem a slave eszközökbe is kellene egy timeout-ot rakni, így ha nem tud annyi idő alatt válaszolni amíg lehet, utána ne is akarjon
(#) sgt hozzászólása Júl 10, 2012 /
 
Sziasztok!

Megépítettem a Topi féle programozót, de nem tudok vele programozni. XP-n ügyködöm. A drivert felrakja, az avr studioval tudok is csatlakozni, de ezek után semmit sem tudok csinálni :no: , mert mindig azt a frekvenciával kapcsolatos hiba üzenetet dobja fel. Kicsit változtattam a kapcsoláson, remélem nem emiatt nem megy. Ötletek?
(#) sgt válasza sgt hozzászólására (») Júl 10, 2012 /
 
És még annyit hozzá tennék, hogy a SLOW jumpernek rajta kell lennie, más különben még a drivert sem tudom felrakni.
(#) pityu_lite válasza luxmanpower hozzászólására (») Júl 11, 2012 /
 
Sziasztok!

Egy másik programrész kellett meggyorsítani kicsit... A folyamatos működés közben néha néha beragadt valahol és késve dolgozta fel a kérdést, -> késve válaszolt, ez okozott galibát. Persze válaszolt, csak így már a masternek zavaros
Stefan igen csomagokról van szó és a slave-k csak CRC és lezáró nulla fogadás után csinálnak valamit a csomaggal, szóval közbe nem tudja beszemetelni a vonalat.
Azért köszi a tippeket.
(#) pityu_lite válasza sgt hozzászólására (») Júl 11, 2012 /
 
Szia!
Szerintem nem kap tápot a cél áramköröd.
Amikor rádugod a programozót a programozandó áramkörre akkor a LED1A elalszik ? Mert ahogy látom az ISP csati VCCtarget lábára van kötve a Q2 vezérlése, és ha van táp a céláramkörön akkor az a tranyó kinyit és a vele párhuzamosan lévő led nem világít.
Szóval (én véleményem szerint ) a VCCtarget lábet is vagy Jumperrel vagy fixen rákéne kötni a VCC-re.
(#) sgt válasza pityu_lite hozzászólására (») Júl 11, 2012 /
 
Szia!
Nem szeretem az USB-t terhelni, és kitudja hogy majd mit fognak vele programozni, emiatt fixen kiszedtem az USB-ről való betápot. Igen elalszik a led (ilyenkor kis is van nyitva a tranyó, hogy az Uce véletlenül se legyen nagyobb mint a led nyitófesze, saját feature ).

A céláramkört a gyári programozómmal tudom programozni (ami szintén nem biztosít tápot).

Hosszú vezeték nem lehet probléma? Nagyjából 17 cm az IC-től IC-ig lévő távolság.
(#) pityu_lite válasza sgt hozzászólására (») Júl 11, 2012 /
 
Hát én nem szeretek táp nélkül programozgatni.
Nem találom egészségesnek ha a szimpla adatjel "tápját" vagyis azt a kis áramú parazita tápot használjuk programozás közben. Ilyenkor történhet bármikor egy reset a cél IC-n, pl ha leesik a tápfesz. Ha ilyen történik programozás közben akkor előfordulhat hogy a fuse bitek hülyeségre állnak be, és pl kizárod magad az IC-ből vagy letiltod az újraprogramozást.

Én amúgy kb 25centis kábellal dolgozom és nem problémás. STK500 van nekem az adja a tápot magából.
Egy AVR Dragonnal is próbáltam , nah ott valamit ügyködnöm kellett ahhoz hogy programozás közben adjon csak tápot( azóta már nincs meg).

Nem hiszem hogy újat mondok de talán az ISP frekit próbáld kisebbre venni.
(#) sgt válasza pityu_lite hozzászólására (») Júl 11, 2012 /
 
A céláramkör külső tápon van. Próbáltam az órajelet változtatni, de semmi .

A 74HC126 mennyire strapabíró? Mondjuk CMOS. Ezt mondjuk majd ha haza megyek, akkor kimérem.
(#) pityu_lite válasza sgt hozzászólására (») Júl 11, 2012 /
 
Hát én sima illesztésekre használom ha használom a 74HC szériát. DE hallottam olyanról hogy egy sima alkalmazásban is pl az MC74HC széria jó volt a sima SN74HC pedig nem . Az én tudásom eddig tartott
(#) pityu_lite hozzászólása Júl 11, 2012 /
 
Hali megint !

Nagyon belejöttem, próbáltam egyszerűen simán egy wdt biztonsági resetet beiktatni a programba , de nem akar jól öszejönni.

Most csináltam egy pár soros led villogást és meg tudnátok mondani hogy mi a rossz ebben ? Első bekapcsolásra felgyúllad a led, vár 2 mp-et , itt jön egy system reset , viszont innentől kezdve eszeveszett tempóban villog a led, nem pedig 2 mp-enként!
Pedig azt hittem 1 include és 2 parancssal jó vagyok

  1. int main(void)
  2. {
  3. MCUSR=0;
  4. wdt_reset();
  5. DDRC|=1<<PC1;
  6. led_on;
  7. _delay_ms(250);
  8. led_off;
  9. wdt_enable(WDTO_2S);
  10. WDTCSR=(1<<WDE) |WDTO_2S;
  11.     while(1)
  12.     {
  13.     }
  14. }
Következő: »»   455 / 840
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem