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
![]() 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
![]() '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. ![]() ![]()
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... ![]() 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 |