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   749 / 837
(#) zombee válasza slimtomi hozzászólására (») Okt 31, 2016 /
 
Szép is lenne a 64 byte!!!
AVR USART: küldő és fogadó oldalon 2-2 byte. Fogadó oldalon azt jelenti, hogy amíg veszi a következő bájtot, addig ki tudod (ki kell!) olvasni azt ami előzőleg beérkezett. Amint beérkezik a következő bájt és nem olvastad ki, beállítódik a DOR (Data OverRun) flag, és elveszik az előző bájt.
Küldő oldalon hasonló: amikor elkezdi adni az előzőt, már írhatod a következő adni kívánt bájtot. Ezzel a stopbitek számát tartani lehet a beállított (1 vagy 2) értékhez, maximalizálva az átviteli sebességet. Olvasásnál és írásnál is ugyanazt a regisztert (UDR/0/1) használod a buffer eléréséhez, az USART belső logikai áramkörei válasszák szét hogy melyik bufferhez férhetsz hozzá.
A hozzászólás módosítva: Okt 31, 2016
(#) zombee válasza monxla hozzászólására (») Okt 31, 2016 /
 
AVR Studio 4-et ajánlok.
(#) monxla válasza rolandgw hozzászólására (») Okt 31, 2016 /
 
Ok. Köszönöm a segítséget!
(#) killbill válasza zombee hozzászólására (») Okt 31, 2016 /
 
Idézet:
„AVR USART: küldő és fogadó oldalon 2-2 byte.”
Igazabol csak 1-1, mert magat a transmit es receive shift regisztert nem szokas beleszamolni.
(#) monxla válasza zombee hozzászólására (») Okt 31, 2016 /
 
7 est kell használjak, kell vegyek egy BIGAVR6 ot, egy debuggert ATMEL-ICE-BASIC. AT90CAN128 at, rá kell forrasszam egy üres PCB re, és ezt kell használjam. Asszem még kell pár apróbb dolog 2x16 display, ilyesmi.
(#) slimtomi válasza killbill hozzászólására (») Okt 31, 2016 /
 
ATMEGA 328P-PU
De aztán lehet rosszul tudom. Egyelőre az a meglátásom, hogy ki kellene szednem az AVR-t az Arduinoból, majd külön így kipróbálni azt, hogy az RX vonalat rákötöm a TX vonalra.
(#) killbill válasza slimtomi hozzászólására (») Okt 31, 2016 /
 
Mint fentebb elhangzott, az AVR-ben egyaltalan nincs FIFO, csak 1-1 byte puffer. Egyebkent 64 byte FIFO nem szokas UART-okban mashol sem. 4-16 byte a megszokott.
(#) slimtomi válasza killbill hozzászólására (») Okt 31, 2016 /
 
Jólvan.
Mindenesetre most beleásom magam ebbe a dologba.
AVR beizzításához elég a külső kvarc 2db kondenzátorral? Persze a tápegységen kívül.
(#) Kovidivi válasza slimtomi hozzászólására (») Okt 31, 2016 /
 
Még az sem kell, alapból a belső oszcillátor megy, 8MHz-en.
(#) slimtomi válasza Kovidivi hozzászólására (») Okt 31, 2016 /
 
De ez állítható a fuse bitekkel, nem? Tudtommal a belső oszcillátor nem a legpontosabb. Nálam az Arduinoban külső, 16 MHz-es kvarccal van beállítva az órajel 16 MHz-re.
(#) slimtomi válasza david10 hozzászólására (») Okt 31, 2016 /
 
Működik!!! Tehát simán áthidaltam az RX és TX vonalakat. Egy nyomógombbal átküldöm a '8'-as karaktert, aminek decimális ASCII kódja 56.
A másik gombbal kiolvasom vevőpuffert. Mégegyszer megnyomva az 'olvasás' gombot már nincs olvasható adat, mert ugye az olvasás automatikusan nullázza a puffert.

Ez így csak arra kell nekem, hogy leprogramozzam a két AVR közti kommunikációt. Majd ha megvettem a másik AVR-t akkor már nem kell saját magammal kommunikálnom
(#) david10 válasza slimtomi hozzászólására (») Okt 31, 2016 /
 
Örülök, hogy müködik!
A két IC között kb. mekkora távolság lesz, amikor a projekted elkészül?
(#) slimtomi válasza david10 hozzászólására (») Okt 31, 2016 /
 
Szerintem 1m. Ez még nem okozhat problémát. Amúgy a pufferhez van hozzáfűznivalóm még.
Ha 5-ször nyomom meg az 'küldés' gombot, akkor az 'olvasás' gombbal 5-ször tudom kiolvasni az értéket a pufferből. Akkor mégsem 1 byte a puffer.

FEJLEMÉNY!
66-szor küldtem el az 56-os értéket. Ezt 64-szer tudtam kiolvasni. A 65. olvasás már 0 volt.
Akkor mégiscsak 64 bájtos a puffer, nem?
A hozzászólás módosítva: Okt 31, 2016
(#) david10 válasza slimtomi hozzászólására (») Okt 31, 2016 /
 
(#) rolandgw válasza slimtomi hozzászólására (») Okt 31, 2016 / 1
 
Ja, szoftveres buffer. Trollkodtok egy aprót, vagy tényleg nem értitek?
(#) slimtomi válasza rolandgw hozzászólására (») Okt 31, 2016 /
 
Nem a SoftwareSerial-t használom, hanem a hardveres UART-ot.
Azt értem, hogy elvileg 1db UDR puffer regiszter van.

Arduino Reference
A hozzászólás módosítva: Okt 31, 2016
(#) david10 válasza rolandgw hozzászólására (») Okt 31, 2016 /
 
Nem trollkodunk. Kérlek írd le, hogy mi hogyan van.
(#) rolandgw válasza david10 hozzászólására (») Okt 31, 2016 /
 
Van Arduino topic. Library-ban van 64 byte buffer, nem az AVR-ben.
(#) slimtomi válasza rolandgw hozzászólására (») Okt 31, 2016 /
 
Így érthető, köszi. Le is teszteltem. Ha minden gombnyomásnál külön indítom a soros kapcsolatot, majd zárom is, akkor a buffer mindig üresen indul az új kapcsolatnyitáskor.
Igazad van, köszi mégegyszer.
(#) Kovidivi válasza slimtomi hozzászólására (») Okt 31, 2016 /
 
A belső oszcillátor pontosabb, mint amire neked szükséged van. Ha Arduino bootloader van az AVR-ben, és/vagy Arduino által készített programot töltesz fel az AVR-re, akkor menj át az Arduinos témába. Itt nem beszélgetünk Ardu-ról. Ezért is lett félreértés a 64byte-os szoftveres buffer-ből, amit csak az Arduino hoz létre.
(#) david10 válasza rolandgw hozzászólására (») Nov 1, 2016 /
 
Én meg azt hittem, hogy az AVR Studio-ban írta a programot.
Csak most jövök rá, hogy Arduinot használt mindvégig.
(#) Gj hozzászólása Nov 3, 2016 /
 
Üdv!
Valaki használta már AVR-eken a csak olvasásra szánt változók RAM-ból FLASH-be történő áthelyezésének lehetőségét? Több helyen is találtam rá példát, de semmi sem működött nekem eddig.

Egy CRC keresőtáblájának a tömbjét akarom áthelyezni:

Tömb deklarációja:
  1. unsigned short const crc16table[] = {0x0000, 0xC0C1 /*és még egy rakat elem*/};


Olvasás:
  1. crc16 = (crc16 >> 8) ^ crc16table[(crc16 ^ adat[i]) & 0xff];


"Mit és hova kell írni", hogy a tömb a RAM-ból átkerüljön a FLASHROM-ba, és még működjön is?
A hozzászólás módosítva: Nov 3, 2016
(#) Kovidivi válasza Gj hozzászólására (») Nov 3, 2016 /
 
Progmem a kulcszó.
(#) Gj válasza Kovidivi hozzászólására (») Nov 4, 2016 /
 
Ez nem újdonság, eddig is azt nyúztam.
Ezek alapján próbáltam, de nem akar összejönni:
A
B
D
D
(#) Topi válasza Gj hozzászólására (») Nov 4, 2016 / 1
 
Megírok pár mintát, hátha segít:

  1. const unsigned short font_large[224][11] PROGMEM = {
  2. /*   */ {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
  3. /* ! */ {0x0, 0x0, 0x0, 0x7E, 0x37FF, 0x37FF, 0x7E, 0x0, 0x0, 0x0},
  4. /* " */ {0x0, 0x0, 0x0, 0x1F, 0x0, 0x1F, 0x0, 0x0, 0x0, 0x0},
  5. ...


Ezt követően kiolvasni flash művelettel tudod, nem SRAM művelettel.

  1. data = pgm_read_byte(&font_large + ....);
(#) Gj válasza Topi hozzászólására (») Nov 4, 2016 /
 
Köszi szépen, működik.
Annyi, hogy "pgm_read_byte" helyett "pgm_read_dword" kellett a short miatt.

Arról van nagyságrendi információ, hogy a FLASH mennyivel lassabb a RAM-nál kiolvasás terén? Megmérném, csak kölcsönben van a szkópom.
A hozzászólás módosítva: Nov 4, 2016
(#) rolandgw válasza Gj hozzászólására (») Nov 4, 2016 / 1
 
LPM utasítás 3 clock, LD= 2, IN= 1.
(#) gabi20 hozzászólása Nov 4, 2016 /
 
Helló urak

Valaki dolgozott már AT90CAN128 procival? Itt az SPI programozáshoz a PE0, PE1, PB1 lábakat kell használni?
(#) Topi válasza gabi20 hozzászólására (») Nov 5, 2016 /
 
Pontosan!
(#) gabi20 válasza Topi hozzászólására (») Nov 5, 2016 /
 
Köszönöm !
Persze én is ezt akkor vettem észre amikor már legyártották nekem a nyák lapokat. Ez van ha az ember nem olvas dokumentációt...
Következő: »»   749 / 837
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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