Fórum témák
» Több friss téma |
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
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
Idézet: Igazabol csak 1-1, mert magat a transmit es receive shift regisztert nem szokas beleszamolni. „AVR USART: küldő és fogadó oldalon 2-2 byte.”
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.
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.
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.
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.
Még az sem kell, alapból a belső oszcillátor megy, 8MHz-en.
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.
Működik!!!
![]() 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
Ö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?
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
A buffer 64 byteos.
http://forum.arduino.cc/index.php?topic=96280.0
Ja, szoftveres buffer. Trollkodtok egy aprót, vagy tényleg nem értitek?
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
Nem trollkodunk. Kérlek írd le, hogy mi hogyan van.
Van Arduino topic. Library-ban van 64 byte buffer, nem az AVR-ben.
Í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.
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.
Én meg azt hittem, hogy az AVR Studio-ban írta a programot.
Csak most jövök rá, hogy Arduinot használt mindvégig.
Ü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:
Olvasás:
"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
Megírok pár mintát, hátha segít:
Ezt követően kiolvasni flash művelettel tudod, nem SRAM művelettel.
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
Helló urak
Valaki dolgozott már AT90CAN128 procival? Itt az SPI programozáshoz a PE0, PE1, PB1 lábakat kell használni?
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... |
Bejelentkezés
Hirdetés |