Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
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   621 / 621
(#) burgdavid hozzászólása Kedd, 0:34 /
 
Sziasztok!

Segítséget szeretnék kérni tőletek, mégpedig azért, mert most szeretnék elkezdeni avr-el foglalkozni, elsősorban ATTiny-val, de fenntartom a lehetőséget a többi verzióra is.
Melyik programozót ajánljátok? Úgyértem ár/érték arányt tekintve melyik a legjobb? Találtam Ebayen már néhányszász Ft-tól, egészen 5-6ezer Ft-ig bezárólag sokfélét, és kissé tanácstalan vagyok.

Előre is köszi a segítséget!

Üdv.: Dávid
(#) csabeszq válasza burgdavid hozzászólására (») Kedd, 10:05 /
 
Kezdőként használhatatlan vackot nem érdemes megvenni.

Én AVRISP-MK-II-t vettem, nem volt vele bajom. Miután kiválasztod, hogy mit akarsz konkrétan, érdemes még kérdezni egyet itt a fórumon.

Az AVRISP-MK-II középkategória, tudsz 20.000-ért is venni.

Bár manapság ellustultam és Arduino UNO-val programozok (az avrisp-mk-ii jobb, de macerás).
A hozzászólás módosítva: Kedd, 10:06
(#) brugo válasza burgdavid hozzászólására (») Kedd, 10:55 /
 
AvrDragon
(#) Massawa válasza brugo hozzászólására (») Kedd, 18:22 /
 
Én is a Dragon mellett teszem le a voksot. Nálam igen jol bejött.
(#) rolandgw válasza burgdavid hozzászólására (») Kedd, 18:24 /
 
Ha van LPT és nem akarsz túl sokat költeni,én ezzel kezdtem anno,most is jól működik:programozó,szoftver.
(#) simpi válasza csabeszq hozzászólására (») Kedd, 18:37 /
 
Mivel jobb az artúrió az AVR ISP MkII-től?
(#) csabeszq válasza simpi hozzászólására (») Kedd, 22:00 /
 
Képes tápfeszt kiadni. Átírtam az ArduinoISP programot és az A0,A1 lábakat 1-be rakom.
Innen lábanként 40 mA kinyerhető és a rövidzár sem teszi tönkre a rendszert.

Ahol lehet, úgy dolgozom, hogy ez a 40 mA a táp.

Az AVR ISP MkII-höz 3x2-es tüskesor kell, míg ArduinoISP esetén simán összekötöd a szükséges lábakat, bármiféle tüskesor nélkül.

Miután felprogramoztam az eszközt, az Arduino-t szimulátorként is használhatom, csak a programot cserélem le. Ugyanazzal az eszközzel tesztelek és programozok.
(#) burgdavid hozzászólása Kedd, 22:39 /
 
Úgytűnik megoldódott a dolog HE-n belül

Köszi szépen!
(#) simpi válasza csabeszq hozzászólására (») Sze, 6:02 /
 
Oké, csak kérdeztem. Pluto által átdolgozott közzétett LUFA is ad ki tápot (3,3V vagy 5V), meg órajelet. Felment Arduino alá is, egyedül az Ardu soros monitorja nem ment vele. Van benne regeneráló biztosíték is nem megy tönkre a zárlattól.
(#) Ivan93 hozzászólása Sze, 13:21 /
 
Sziasztok!
Készítettem próbapanelon egy órát 7szegmenses kijelzőkkel, ATtiny45, mcp23017 portbővítő és egy pcf8563 rtc-vel. Az a gond, hogy 23 óra után 21 jön, majd 29-ig nő és 10-re vált. Innentől megint jó éjfélig. Két gombal tudom állítani az időt, itt az óra és a perc is rosszul vált értéket éjfélkor. (24 és 60 helyett természetesen 0-t ítok az rtc-be). Próbáltam másik ilyen rtc-vel is, ugyan így működik.
Ez a kód olvassa ki az időt illetve állítja be:
  1. while(1)
  2.         {       
  3.                 messageBuf[0] = (RTC); //Perc kiolvasása
  4.                 messageBuf[1] = MIN;       // Starting address in memory
  5.                 USI_TWI_Start_Random_Read( messageBuf, 3 );     // Read 1 bytes of data
  6.                 minute=(messageBuf[1]&0b01110000)/16*10+(messageBuf[1]&0b00001111);
  7.  
  8.                 messageBuf[0] = (RTC); //Óra kiolvasása
  9.                 messageBuf[1] = HOUR;       // Starting address in memory
  10.                 USI_TWI_Start_Random_Read( messageBuf, 3 );     // Read 1 bytes of data
  11.                 hour=(messageBuf[1]&0b00110000)/16*10+(messageBuf[1]&0b00001111);
  12.  
  13.                 for (uint8_t k=0; k<40; k++)
  14.                 {
  15.                         breakup(hour*100+minute); // idő kiírása
  16.                 }//for
  17.  
  18.                 messageBuf[0] = (IOEXP)//Portbővítő beolvasása
  19.                 messageBuf[1] = GPIOB;       // Starting address in memory
  20.                 USI_TWI_Start_Random_Read( messageBuf, 3 );     // Read 1 bytes of data
  21.                 if(messageBuf[1]&0b00000001) //ha az 1es gomb megnyomva -> hour++
  22.                 {
  23.                         temp=hour;
  24.                         if(temp<23) {temp++;}
  25.                         else temp=0x00;
  26.                         temp=(temp/10*16)+(temp%10);
  27.                         messageBuf[0] = RTC;    // device address
  28.                         messageBuf[1] = HOUR;   // address in memory
  29.                         messageBuf[2] = temp;   // data
  30.                         USI_TWI_Start_Read_Write( messageBuf, 3 )//Új óra beírása
  31.                 }//if
  32.                 if(messageBuf[1]&0b00000010) //ha a 2es gomb megnyomva -> minute++
  33.                 {
  34.                         temp=minute;
  35.                         if(temp<59) {temp++;}
  36.                         else temp=0x00;
  37.                         temp=(temp/10*16)+(temp%10);
  38.                         messageBuf[0] = RTC;    // device address
  39.                         messageBuf[1] = MIN;    // address in memory
  40.                         messageBuf[2] = temp;   // data
  41.                         USI_TWI_Start_Read_Write( messageBuf, 3 ); //Új perc beírása
  42.                 }//if
  43.         }//while

Nem tudom, hogy a kód melyik része okozza, esetleg az óra ic sajátossága lenne.
Aki meglátja a hibát a programban vagy tapasztalt hasonlót, kérem segítsen.
Előre is köszönöm!
Iván
(#) holex válasza Ivan93 hozzászólására (») Pé, 14:44 /
 
Egyszerűen arról van szó, hogy 23 után, ami 2 számjegyes, nulla jön, ami egy számjegyes, viszont az első számjeggyel nem csinálsz semmit, az változatlan marad. Tehát 23, 20, 21... 29 így fogja kiírni neked, aztán megint 2 számjegyes jön (10) és ezzel helyreáll a rend. Éjfélkor kezdődik elölről Ez alapján már gondolom ki tudod javítnai.
(#) Ivan93 válasza holex hozzászólására (») Szo, 10:14 /
 
Jobban megfigyeltem az éjféli váltást és észrevettem, hogy 23:59 után megint 23:59 jön, majd 21:51. A második 23 óra 10 perckor a perc, illetve reggel 10-kor az óra is helyre áll. Tehát éjfélkor, de csak ekkor az óra és a perc is elromlik. Az rtc amúgy binárisan kódolt decimálisként tárolja az időt, ezt alakítom vissza a 6. és 11. sorban. Én csak kiolvasom és kiírom a számokat, a növelésük az rtc feladata, így most sem értem miért hibázik ilyenkor.
Valamilyen ellenőrző algoritmussal lehetne korrigálni a hibát, de az rtc lényege az lenne, hogy megmondja a pontos időt.
(#) Toyoo hozzászólása Szo, 15:53 /
 
Sziasztok!
Elkezdtem AVR-ekkel foglalkozni és az ATtiny45-20PU processzor amit kaptam szerintem hibás. A probléma az, hogy amikor az egyik lábat kimenetre állítom, és felhúzom magas szintre,LED-et rákötök és gyakkorlatilag villog, ahelyett hogy folyamatosan világítana. Míg egy másik ATtin45 -re töltve a programot helyesen működik.
A pogram:

  1. #ifndef F_CPU
  2. #define F_CPU 8000000
  3. #endif
  4.  
  5. #include<avr/io.h>
  6. #include<avr/delay.h>
  7.  
  8. int main(void)
  9.         {
  10.  
  11.         DDRB = 0x01;
  12.         PORTB = 0;
  13.  
  14.         while(1)
  15.         {
  16.                 PORTB = 0x01;
  17.         }
  18. }


Másik programra is ugyan olyan sebességgel villog a led. A _delay_ms(100); nak semmi hatása, míg a másik AVR-nél úgy működik ahogy a nagykönyvben meg van írva

  1. #ifndef F_CPU
  2. #define F_CPU 8000000
  3. #endif
  4.  
  5. #include<avr/io.h>
  6. #include<avr/delay.h>
  7.  
  8. int main(void) {
  9.  
  10.         DDRB = 0x01;
  11.         PORTB = 0;
  12.         while(1)
  13.         {
  14.                 PORTB = 0x01;
  15.                 _delay_ms(100);
  16.                 PORTB = 0x00;
  17.                 _delay_ms(100);
  18.         }
  19. }


A kérdés, hogy ez így kuka? Vagy van esetleg megoldás erre?

Válaszokat előre is köszönöm!
(#) benjami válasza Toyoo hozzászólására (») Szo, 17:47 /
 
A konfigurációs bitek is azonos módon vannak beállítva? Csak azért, mert pl. egy WDT miatti állandó resetelés miatt pont így viselkedhet.
(#) killbill válasza Ivan93 hozzászólására (») Szo, 20:00 /
 
Sokat konnyitene a debuggolason, ha az RTC-bol kiolvasott BCD erteket iratnad a kijelzore hexa szamkent. Akkor rogton latnad, hogy az RTC rontja el, vagy valami a konverzio korul nem jo. Bar utobbi ranezesre jo.
Nem ismerem ezt az RTC-t, de nem lehetne egyszerre kiolvasni a percet es az orat? Ezm indenkeppen tanacsos, mert amikor eppen valt a perc es az ora is, akkor elofordulhat, hogy meg a valtas elotti orat olvasod ki, es melle a valtas utani percet.
(#) Toyoo válasza benjami hozzászólására (») Szo, 23:00 /
 
Sajnos ezt most nem fogom tudni megmondani, ugyanis sikerült kitiltanom magam. Jövőhéten újraélesztem, ha tudom és megnézem.
Következő: »»   621 / 621
Bejelentkezés

Belépés

Hirdetés
Frissek
2014. Szept, 21. Vas
8:06:47
Jelenleg 263 fő olvassa az oldalt
Online tagok:
Lapoda.hu     XDT.hu     HEStore.hu