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
Igaz, hogy én csak LINUX alatt használom . De ezen a címen,
http://www.lancos.com/prog.html minden máshoz is van megoldás. Üdv!
Elnézést kérek Mindenkitöl!
Az elözö válaszomban, igaz jó. De már nem aktualizált címet adtam meg ! Amire gondoltam az a következö: http://avrburn.sourceforge.net/hu/index.html Nem ad választ ugyan a Tyni2313 égetésére(!?), de ez egy teljesen letisztult valami.:wave: Csak ajánlani tudom. Természetesen elsö sorban UNIX-osoknak! Viszont ehhez minden olcsón van beleértve az op. rendszert is!
En is Linuxot hasznalok.Avr-gcc es avrdude.
C -ben fejlesztesz avr-re? Azt szeretnem kerdezni ,hogy avr- projektet hogy debugolod milyen eszkozzel?
Mivel ilyen "kis" méretü nem tartok célszerünek másképpen, mint
assemblerben programozni. A szokásos de 'fapados' eljárásom az, hogy -ha gond van ide berakok egy kis output rutint. Az igy kapott dump. Eddig még mindíg elég volt az elírás felfedezésére. Természetesen ez egy 'tyni 8 lábú" eszköznél nem használható eljárás. Ha ilyen környezetben van gond.Akkor sincsen baj. Mert a regiszter defek. cseréjével a progi szimulálhatja saját magát a kedvenc 'mega8-amon is. Itt már semmi sem akadályozhat meg a fenti eljárás alkalmazására.
Az elözö üzenetem elennörzés nélkül ment fel.
Elnézést érte! A javitott verzió ez, Mivel ilyen "kis" progikat méretü nem tartok célszerünek másképpen, mint assemblerben megírni. A szokásos de 'fapados' eljárásom az, hogy -ha gond van ide berakok egy kis output rutint. Az igy kapott dump. Eddig még mindíg elég volt az elírás felfedezésére. Természetesen ez egy 'tyni 8 lábú" eszköznél nem használható eljárás. Ha ilyen környezetben van gond. Akkor sincsen baj. Mert a regiszter defek. cseréjével. A progi szimulálhatja saját magát akár a kedvenc 'mega8-amon is. Itt már semmi sem akadályozhat meg a fenti eljárás alkalmazására.
Meg kerdeznek ha szabad
Milyen forditot hasznalsz assemblyhez? Es melyik szintaxist hasznalod AT&T vagy Intel?
Mégegyszer a tegnapi zavaros levélért, de sokan voltak a
'nyakamon'. Én a TASM nevü "Thomas own assembler"-t használom. Intel *.hex -et generálok belöle mert az illeszkedik a PonyProg programozóhoz is. Válasz csak akkor születhet, ha van kérdés
Lenne egy problmémám PWM beállítással kapcsolatba...
ATmega8 TimerCounter1 16bites számlálójával valósítom meg a dolgot, és mikor az OCR1AH regiszterét beállítom egy értékre, az a következő lépésben mindig kitörlődik... az OCR1AL regiszternél nem jelentkezik ez a probléma, és nem tudom h mi lehet a gond... Csak szimulátor programban játszottam még végig a dolgot... lehetséges h a szimulátor program hibázik? Valakinek volt már ilyen jellegű problémája? Please help!
Kérlek pontosan add meg, hogy melyik regiszterbe milyen értéket töltöttél.
Ha jól látom ez egy frequency and phase correct 16 bit PWM (9).
Az adatlapon olvastad a 79-es oldalt, ami a 16-bites regiszterek kezelésére vonatkozott? Írásnál először a H-t kell írni, majd az L-et. Olvasásnál először az L-et kell olvasni aztán a H-t. Van egy temp regiszter, amibe a H beíródik és az L írásakor egyszerre kerül a 16 bites regiszterbe. Olvasásnál, amikor olvasod az L-et a H beíródik a temp-be, amit ezután ki tudsz olvasni. ldi r17,0xFF ldi r16,0XFF out TCNT1H, r17 out TCNTH1L,r16 . . . in r16,TCNT1L in r17,TCNT1H ..... Valahogy így. Zoli
Köszönöm szépen a kielégítő választ! Ez valóban elkerülte a figyelmemet...
Akkor most meg is próbálom kijavítani... mégegyszer köszi
Megpróbáltam úgy is, de sajnos nem oldotta meg a problémámat, ugyan az történik... bemásolom a programrészletet, hátha az segít... tanácstalan vok...
ldi temp1, 0b10000001 out TCCR1A, temp1; ldi temp1, 0b00010001 out TCCR1B, temp1; ldi temp1, 0b00100011 ldi temp2, 0b00101000 out ICR1H, temp1 out ICR1L, temp2 ldi temp1, 00000010 ldi temp2, 11101110 out OCR1AH, temp1; out OCR1AL, temp2;
Nem tudom hogy az hiba-e de az utolsó két sorban nincs 1b a bináris értékek előtt. És pontosvessző se kell utána. Esetleg még az lehet rossz, hogy valami interrupt elrontja a temp-ek értékét, amire nem figyelsz.
Nos az OCR1AH és L Double buffered PWM-módban. Tehát, ha jól értem, akkor a fenti regiszterek csak TOP ill. BOTTOM - nál frissülnek így jön létre a glitch free PWM. AZ OCR1H nem olvasható az előző hozzászólásban említett Temp regiszteren keresztül. Tehát a H csak írható, de PWM-módban nem tudod kiolvasni csak az L - et. (85,86. oldal a leírásban)
Zoli
Most nem igazán értettem amit írtál... jelen esetben én nem akarom kiolvasni az OCR1AH-ból az értékeket, csak bele akarok írni, tehát ezt csak TOP és BUTTOMnál tudom megtenni? Vagy ezt hogy csináljam?.. Bocs az értetlenkedésért...
Igen. Amikor beírsz adatot, az először a bufferbe kerül és TOP vagy BOTTOM-nál kerül a helyére. Valamint az OCR1AH-t csak írni tudod, nem tudod kiolvasni, hogy tényleg bele került-e. Hidd el ott van.
Zoli
Mostmár érthetővé vált számomra... Köszi a segítséget!
András
Sziasztok!
Az Atmega128-nál a PORTF felső négy (portf.4-portf.7) bitjével kell valami különlegeset csinálni, hogy digitális kimenetként használjam, vagy egyszerűen le van égve nálam ez a négy bit a portból. Próbáltam már bascom-AVR-ben és WinAVR-ben is, de hiába rakom a DDRF-be 255-öt, aztán írok villogtató programot, erre a portra, ez a négy bit nem akar menni nálam. Most a program rossz, vagy a proci?
Asszem én vagyok a :lama::lama:
A JTAG be volt kapcsolva..... Most néztem meg az adatlapot..... Már arra készültem hogy vennem kell egy új procit, mert valahogy leégettem....... Hátha más is tanul a hibámból....
Van pár dolog, ami lefoglal portokból lábakat. Én ezen a téren már elrontottam mindent, amit lehetett ))))
Újra én vagyok
A WinAVR-ben vagyis C nyelven az unsigned és a signed között mi különbség van? pl az uint8_t és az int8_t között?
unsigned - előjel nélküli számábrázolás a változóban
signed - eljőjeles számábrázolás. Pl 8 bites változónál az unsigneddel 0-255-ig ábrázolhatsz, signeddel meg -128 -től 127 -ig (kettes komplemens ábrázolás)
Szia!
signed = "előjeles", tehát pl. "signed char" (alapból signed) -127-től +126-ig megy, "unsigned char" = előjel nélküli 0-255-ig. De mindegyik logikusan csak 1 byte. AVR-éknél az uint8 = 8 bites unsigned integer, ami 0-255-ig megy, az int8 pedig a fentiekben leírthoz hasonlóan -127-től +126-ig. uint16: 65535-ig, míg int16 -32767-től +32766-ig. uint32: ~4,3mrd-ig. Remélem tudtam segíteni.
Köszi mindkettőtöknek !
Most már értem miért nem ment a for ciklusom signed-al. mivel az csak 127 ig van for(uint8_t i=1; i<128; i++) { PORTD=255; } Még csak tanulom a C-t.... Ismeretlen, de tetszik! :yes:>
Egyszer el kell kezdeni!
Jó az assembly, de nem mindenre. Amit egyszer a saját kárán/kínlódásán tanul meg az ember, azt tuti nem felejti el! Nah, jó programozást! Üdv. deguss
Szia!
Milyen progi van az "stk200" mögött, amikor LINUX-on használod?
Szia.
Ha az egetore(letolto progira) gondolsz,akkor avrdude van mogotte,en is ezt hasznalom. Bocsi Pavel hogy belekotyogtam Deguss: Idézet: „AVR-éknél az uint8 = 8 bites unsigned integer” Az uint8 mint tipus = unsigned char-al. 8 bites elojel nelkuli. |
Bejelentkezés
Hirdetés |