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
Mivel az Arduino-ból való többszörös hivatkozások kibogozását sokkal lehetetlenebbnek látom, így folytattam az eredeti posztomban szereplő KÓD további módosítását.
Már el jutottam odáig, hogy szoftveres soros porton küld karaktert és sztringet is, de fogadni nem fogad (!!!), pedig számomra ugye az lenne a fontos... itt végképp megakadtam. Venné valaki a fáradságot és bele nézne a kódba, hogy mi lehet vele a baj? 0 Error, 0 Warning
Itt egy sima C, 328p-re. (Makefile-ban is ez van beállítva) A header-ben írd át a baud-ot és ha szükséges a port/pin részt.
Nagyon szépen köszönöm, ez kisebb átalakítás után már tökéletesen működik!
Sziasztok! Segítséget szeretnék kérni valakiítől aki tud assemblyben programozni AVR-eket. Megépítettem egy DMX fényvezérlő modult: Bővebben: Link, de ugyanezen a weboldalon lévő strobo mod firmware kellene nekem rá, és miután letöltöttem a firmwaret azzal szembesültem, hogy a mellé csatolt kapcsolási rajz nemugyanaz mint a dimmer packnak. Valaki lenne szives átírni nekem a kódot úgy hogy kompatibilis legyen a dimmer pack kapcsolásával?
Pontosan miben különbözik a kapcsolás a tiedtől?
Mert a kimeneteket a program elején javíthatod:
Ha csak a port pinek nem stimmelne?
Ha a portok sem? Akkor minden felhasználásnál azt is javítani kel!
Mellékelem a két kapcsolási rajzot, a logic.pdf-ben van meg a feltenni kívánt firmwarehez való kapcsolás, illetve az általam megépített kapcsolás az itt található: Bővebben: Link
Figyusz!
Se kedvem, se időm ki szedni a különbségeket! Csináld meg magadnak, ha kel! Ha meglesz a lista? Aztán majd elmagyarázhatom mit hol kel javítanod! Nem nagy ügy az egész, csak időt kel rá szánni.
A hozzászólás módosítva: Aug 5, 2016
Lehet, hogy nagyon maximalista vagyok, de a UART szoftveres emulációról nincs nagy véleményem.
Kapitális probléma, hogy az Atmega328-ba csak 1 UART-ot tettek, ennél csak az rosszabb, hogy szoftveresen kezdek UART-olni az elbaltázott hardver kijavítására. A szoftveres UART nagyon leterhel mindent, nem késhet a mikrovezérlő, maximális bitráta valahol 9600-nál van megbízhatóságban,... Mindenki eljut általában addig, hogy kevés 1 UART. Nálam a következő megoldások merülnének fel: - Atmega2560-on van 4 UART, belerakom a hardvert rendesen, hadd szóljon - Duplázom az AVR-t, egyik modul a GPS-t szűri és I2C-n csak a lényeget tolja át - Kapcsolót rakok az UART-ra, ha épp feltölteném a kódot, akkor lekapcsolja a GPS-t, hogy ne zavarjon - A GPS resetnél áramot sem kap, így nem tud az UART-ba belezavarni feltöltésnél. Amikor a kód elindul, akkor indítja a GPS-t, onnan kezd adni - Nem USB-n töltöm fel a kódot, hanem Wifi-n, infán, RC-n, I2C-n,... Rengeteg projektem volt, de szoftver UART-ot bevallom még nem használtam. Ha van más ésszerű opció, akkor azt használom. A hozzászólás módosítva: Aug 5, 2016
Csak egyet érteni tudok veled!
Ezért nem is talált a Tomi_Bp barátunk hozzá minta kódot.
Szia. Milyen hardveres hibákra gondolsz? Az uart perifériára érted? Én még nem vettem észre egyet sem, de ezentúl figyelni fogok rá. Mikor jön elő a hiba? Köszi.
Szoftveres UART-ról beszélünk: Bit-Bang. Ez gondolom úgy megy, hogy egy pin change interrupt-ot ráállítasz valamelyik pin-re, amikor jön a start jel, akkor meghívódik egy interrupt, elindít egy timert és adott időpontokban mintavételezni kezdi a pin-t, lehetőleg az időintervallum közepén.
- Start jel -> PCINT, Timer indítás -> BIT7, BIT6, BIT5, BIT4, BIT3, BIT2, BIT1, BIT0, STOP bit Mindezt szoftveresen. Commodore 64-en volt szoftveres az UART, semmi mást nem csinálhattál mellette, kizárólag a jelet fogadtad. Mit nem tehetsz meg? - nem tilthatsz interruptot hosszú időre cli(), mert bitet veszíthetsz - minden interruptnak gyorsan be kell fejeződnie, nehogy feltartsa a vételt Lehet szoftveresen 100%-ig megbízható UART-ot írni, csak utálom. Nagy munka, gondos odafigyelés, miközben egyszerűbb másik IC-t berakni, ahol 2 hardveres UART van. Kis energiát kell befektetni, egyszerűbb kód és cserében stabilabb működést kapsz. AVR alatt az UART dupla pufferes, tehát amikor 1 byte-ot fogadott, elkezdi fogadni a másikat. 8 bitnyi időd van 1 helyett. A hozzászólás módosítva: Aug 5, 2016
Rolandgw linkelt nekem EBBEN a válaszban egy működőt. (Ismét köszönet érte!!!)
Picit kellett csak átszabnom. Amúgy egyetértek veletek, én is jobban örülnék, ha (min.) két hardveres UART lenne benne... Nekem eddig még nem volt szükségem több soros portra. Elég szokott lenni az I2C, az SPI és az egy soros. A hely szűke miatt döntöttem a Atmega328p mellett a NANO panelen. Pár évvel ezelőtt, mikor minden adott volt a maratáshoz (otthon is nehéz volt HidrogénPerOxidot venni), simán mindennek saját nyákja volt. Mióta kiköltöztem, többnyire modulokat használok, dugdosós panellel, a véglegesnél pedig próba nyákba forrasztva. (Apropó: Egy haverom tudott pár éve egy talán angol céget, akik csináltak nyákot prototípus mennyiségben 1-2-3 db mennyiségben is, tűrhető áron. Nem tudtok hozzá valami elérhetőséget véletlenül, vagy másik céget, akikkel van jó tapasztalatotok? És postáz Svédországba.)
http://pcbshopper.com/
Csak megadod, hova, mennyit és mekkorát és listázza honnan, mennyibe kerülne és mikorra várható...
Sziasztok!
Egy Ausztrál, kezdő srác kért segítséget AVR programfeltöltés problémájával. Van egy Attiny85 amibe a képen látható hex-file-t kellene feltöltenie úgy, hogy utána a FUSE biteknél az órajel PLL legyen. Mivel én még életemben nem használtam az avrdude-t, így csak pislogok, főleg az "invalid format" üzeneten. A "no such file"...talán nem abban az alkönytárban van a file, ahonnan indítja az avrdude-t? Maga a hex file Bascomból fordítódott, tehát annak formátuma jó. Előre is köszönöm a helyes irányba való terelést.
Szia. Azt hittem, a hardveres uart a bugos. A software-esnek rengeteg hátránya van, de néha muszáj használni, vagy uC-t váltani.
Szia,
A vu_mini85_328p.hex file valószinüleg nincs a C:/Users/Matt mappában. A legegyszerübb, ha oda átteszed.
Köszönöm, megírtam neki, az volt a gond. Engem azért megzavart egy kicsit az a nem megfelelő formátum hibajelzés, érdekes...végül is ha nincs file, akkor az nem jó formátumú
Köszönöm az okosítást!
Hardver bugról Atmega328P-n csak az I2C-ről tudok.
Amikor a specifikációt olvasod az I2C multimaster résznél (arbitráció,...), az egészet átugorhatod. Két hetem ment el rá, hogy megpróbáljam több mesteres módban járatni az Atmega-t eredménytelenül. Hardver bugok tömkelege teszi lehetetlenné a többmesteres módú használatot. Ha több mestert akarsz egy I2C buszon, akkor más IC-t kell használni. A hozzászólás módosítva: Aug 7, 2016
Ha már otthon vagy AVRdude témában: A FUSE bitek átállítására (is) ez így jó lesz?
avrdude -c usbtiny -p attiny85 -U flash:w:filenév.hex -U lfuse:w:0x61:m A második -U-ban nem vagyok biztos, a fuse L értékét programmal számoltattam ki (PLL 16MHz kellene). Vagy külön, ha már felment a hex-file (az már sikerült neki), akkor: avrdude ........????..... (csak a FUSE-bitek állítására) Nagyon köszönöm, hogy ránéztél!!!
Nem kell még egyszer a flash, a fuse különálló rész.
Bővebben: Link
Elküldtem a hex-filet (én írtam a programot, de én más letöltőt használok) és a srác elég gyenge elektronikai tudással rendelkezik. Vett egy usbtiny programozót meg letöltötte az avrdude-t és előbb a path nem stimmelt, most már sikerült feltölteni a programot, de a program 16MHz-es órajelet igényel. Ehhez át kell állítani a fuse-biteket, na itt megállt a tudomány, mert én még életemben nem használtam a programot, elküldeni az erdőbe nem akartam (no meg véletlenül kizárja magát a uC-ből, akkor baj van), ezért kérdeztelek Titeket, már aki használja a feltöltő programot. Maga a hexa FUSE értéket a neten talált kis programmal számoltam (és számoltattam ki mással is), remélem, menni fog neki. persze majd bele jön, csak új dolog neki ez a vackolódás. Elég nehéz a távoli debug, ha valami nem megy majd neki, sajnos a környezetében nincs, aki segítsen. Tehát ez a történet és sokan összeraktátok a helyes parancssort. Most hajnal 2 körül van náluk, tehát kicsit lassan kapunk visszajelzést Még egyszer nagyon köszönöm a segítséget, remélem egy életre megjegyzi, mit-hogyan.
Üdv!
Megint van, ami meghaladja a jelenlegi tudásomat! Cpp környezetből, hogyan tudom átrakni az ilyen többszörösen felül definiált függvényeket, C környezetbe?
Egyetemen ezt tanították:
print_char print_int_color println_float A metódus szignatúrája a névbe kerül. Ez a hivatalos C++ átirat C-be.
Sajnos, pont ettől a választól féltem!
Mert így javítani kell az alkalmazásban mindenhol neveket!
A konvenció a következő:
A név 3 elemből áll, a csomaggal kezdődik, amit a név követ, legvégén a paraméter lista. serial_println_int(int char); Linuxos körökben a C++ átterjedt a C osztályokra is, szóval hasonló felépítésű C fájlokat láthatsz. Nálad a következőképpen illene a kódnak kinézni:
Amennyiben az osztálynak paraméterei is vannak (new MyClass) a következőképpen néz ki:
Elsőre lehet, hogy szokatlan lesz. A hozzászólás módosítva: Aug 9, 2016
Próbálkoztam a kevert módszerrel, de előjött egy rakat hibajelzés!
És ez a formátum, hogy tetszik?:
A hozzászólás módosítva: Aug 9, 2016
|
Bejelentkezés
Hirdetés |