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   407 / 840
(#) mzozo95 válasza szdani hozzászólására (») Feb 4, 2012 /
 
Szia!

Egyenlőre csak annyit, hogy hardweres pwm-el elő tudjam állítani a megfelelő vezérlőjelet, és értsem is hogyan működik... Utána egy ADC-vel rákötnék egy potit, majd azzal vezérelném az egészet, végül jönne az lcd is... Már msp430 as kittel megcsináltam az egészet, de most váltottam nem rég AVR-re...

Valaki talált hibát a forráskódban?

Zoltán
(#) szdani válasza mzozo95 hozzászólására (») Feb 4, 2012 / 1
 
Ezt nézd meg ez egy rc-szervó teszter egy potival vezérled egész jól le van írva ahogy megírta a srác.
(#) zombee válasza mzozo95 hozzászólására (») Feb 4, 2012 / 1
 
Bocsánat! CTC módban fut az időzítőd, rossz értéket adtam meg. Bár ettől még működhetne...
De ejtettél egy végzetesebb hibát: a program futása soha nem érhet véget, a main() fv. végére tegyed be:
  1. while(1);


Illetve mondom a helyes timer beállítást. Egyedül a TCCR1A-s sort kell módosítani:
  1. TCCR1A = 1<<COM1A1 | 1<<WGM11;
(#) sgt válasza szdani hozzászólására (») Feb 4, 2012 /
 
Minden jó ha a vége jó .
(#) mzozo95 válasza zombee hozzászólására (») Feb 5, 2012 /
 
Szia!

Módosítottam a programot:
  1. #ifndef F_CPU
  2. #define F_CPU 8000000
  3. #endif
  4. #include <avr/io.h>
  5.  
  6. int main(void) {
  7.     DDRB = PINB3;
  8.  
  9.         //Plafon beállítátsa - 22ms:
  10.     ICR1 = 2499;
  11.     //Kitöltés beállítása - 2ms:
  12.     OCR1A = 250;
  13.     //időzítő mód beállítása és a timer indítása - előosztó=64 :
  14.     TCCR1B = 1<<WGM13 | 1<<WGM12 | CS11 | CS10;
  15.     //időztő mód(WGM11 és WGM10 marad 0-ban), és kimenet(OC1A) beállítása:
  16.     TCCR1A = 1<<COM1A1 | 1<<WGM11;
  17. while(1){};
  18.    }


Így sem reagál, semelyik lábon sem ad ki pwm jelet, sőt, mindegyik láb értéke "0".

Talán hibás lenne az AVR...? A normál portot működnek... de ez nem akar. Nem kellene külső oscillátor hozzá? (elég butaság lenne...)

Ilyenkor mit lehet tenni?

Zoltán
(#) zombee válasza mzozo95 hozzászólására (») Feb 5, 2012 /
 
Két hiba is van, este nem vettem észre. Egyiket Te ejtetted, másikat én, és pont ugyanaz a hiba.
Persze ilyenkor mindenki arra gondol kínjában hogy talán az AVR nem jó(én is).

7. sor:
  1. DDRB = 1<<PINB3;

14. sor:
  1. TCCR1B = 1<<WGM13 | 1<<WGM12 | 1<<CS11 | 1<<CS10;
(#) Suncorgo hozzászólása Feb 5, 2012 /
 
Sziasztok

Azért fordulok hozzátok mert egy mega8-as nem válaszol vissza. Mi lehet a baja?

Próbáltam kvarcot tenni mellé, külső órajellel de semmi. ISP freki hibát ír az avr studio.

Szkóppal néztem, SKC-n van órajel, MOSI-n van adat viszont az IC nem válaszol vissza a MISO lábán. Kinyirtam volna a bootloadert belőle?

Van valami egyszerű nagyfesz programozó amivel életre tudnám kelteni?

Üdv:
Suncorgo
(#) zombee válasza Suncorgo hozzászólására (») Feb 5, 2012 /
 
Az ISP inkább egy programozási felület, nem szokás bootloadernek hívni. Ha a RESETDISBL vagy az ISPEN nevű FUSE bitek valamelyike el lett állítva, az csak nagyfeszen(HVPP) javítható.
A legegyszerűbb ilyen eszköz a HVPP Fuse bit Doctor, erre rákeresve meglesz a kapcsrajz is.

Ezen kívül a gyári STK500(és HVPP-képes klónjai, pl. a sajátom vagy a der-hammer féle), illetve AVR Dragon.
(#) Suncorgo válasza zombee hozzászólására (») Feb 5, 2012 /
 
Nem azt hívtam bootloadernek. Csak gondoltam hogy a bootloader válaszol vissza SPI-n a programozónak mikor adat kiolvasás van.

Az AVR doper ami itt az oldalon fennt van az képes HV progra? Mármint ha megoldom hogy a cél AVR reset lábára 12Vot kapcsoljon?
(#) zombee válasza Suncorgo hozzászólására (») Feb 5, 2012 /
 
Bootloader nem szokott SPI-n kommunikálni. Általában Rx/TX-en, mint pl. az Arduino vagy az Evertool.
Vagy USB-n (pl. USBBOOT), illetve hardveres USB-vel rendelkező AVR-ek esetében a FLIP bootloader.

ATMega8 esetében a Doper nem lesz jó HVPP-re, azzal csak HVSP-t lehet(ami a kisebb Tiny-khoz jó).
A legegyszerűbb amit építhetsz erre, az egy HVPP Fusebit Doctor, kb. ugyanannyira bonyolult mint a Doper.
(#) Suncorgo válasza zombee hozzászólására (») Feb 5, 2012 /
 
Értem. Köszönöm a segítséget zombee!
(#) kovacsj válasza zombee hozzászólására (») Feb 5, 2012 /
 
Mire való tulajdonképpen az a bootloader? Én még soha nem használtam, pedig lehet, hogy jobb lett volna.
(#) zombee válasza kovacsj hozzászólására (») Feb 5, 2012 /
 
Egyfajta program az AVR-ben ami bizonyos feltételek esetén kommunikál valamilyen csatornán(lehet USART, SPI, I2C, USB), és rajta keresztül betölti azt a kódot amit a boot-feltétel nem-teljesülése esetén futtatni fog.
Persze a bootloadert is be kell égetni és a BOOTRST-t meg a kezdőcímet beállítani.
Meg is kell írni/módosítani a bootloader kódját ha pl. az induló feltételt állítanád be.

A legjobb példa erre az Arduino és a JTAG-ben használt Evertool.
A legtöbb AVR-hez elérhető a szintén avr910-kompatíbilis bootloader(pl. az Evertool is az).
Ha már avr910: általában lefoglal egy portlábat, és bekapcsoláskor azt figyeli hogy le van-e húzva.
Ha nincs akkor a bootloader a kezdőcímre ugrik(magyarul: kilép), ha igen akkor avr910-es programozóként viselkedik és önmagát programozza.
A programozás végén általában újra kell indítani az AVR-t, és a bootloader aktiválásához is kézzel RESET-elni kell tehát nem lesz egyszerűbb.
Olyan eszközöknél használnak bootloadert amelyeket néha(inkább nagyon ritkán vagy soha) frissíteni is kell, és azt a meglévő(tehát RS-232, USB, CAN-busz, stb.) csatlakozáson egy egyszerű program lefuttatásával külső segédeszköz(pl. AVR-programozó) nélkül lehet megejteni.

Nekem is lenne egy kérdésem a GSM-modullal, mert éppen egy konzolos eszközt(PC interfész) kellene programoznom. A GSM-modul esetében az AT parancsokat vagy egy ENTER(azaz , 13-as ASCII-kód) zárja ha kézzel programozod, de automata(pl. AVR-ből) programozásnál már egy \n (ez egy , 10-es ASCII-kóddal).
A kérdésem hogy lényegében mindkettő zárhat egy utasítást?
(#) Suncorgo hozzászólása Feb 5, 2012 /
 
Megszületett az AVR Fuse Doctor. Remélem hozza a várt eredményt
(#) Suncorgo válasza zombee hozzászólására (») Feb 5, 2012 /
 
Bootloadert ISP programozóval lehet betölteni? Ez lehet hogy hülye kérdés mert pont az a szoftverrészt akarom felülírni ami éppen kommunikál.
(#) zombee válasza Suncorgo hozzászólására (») Feb 5, 2012 /
 
Gyönyörű! Az első változatom megépítése is tovább tartott és csak drótoztam, tervezésre nem futotta(1. kép).
De végül 2 hét alatt csak-csak elkészült egy maratott verzió 3 darab foglalattal(2. kép).
(#) zombee válasza Suncorgo hozzászólására (») Feb 5, 2012 /
 
Betölteni egy szűz AVR-re csak programozóval(ISP, JTAG) lehet.

A bootloader elvileg felülírhatja magát, de minden pillanatban csak olyan szektort írhat amin
éppen nem fut a program. Egy szektor mérete jelen ismereteim szerint a BOOTSZ nevű FUSE bitek által legkisebb értékre beállítható terület. Hülye megfoglamazás tudom, ATMega32-nél ez 256 bájt. Tehát a maximális, 2048 bájtos bootloader esetében bármely, megadott állapotban 7 darab bootloaderes szektort írhatsz...

A kommunikációs rész is lecserélhető ha az új programkódot a kommunikációs rész az SRAM-ba vagy EEPROM-ba tárolja le, egy másik szektorba pedig lehet az a kód ami onnan kiolvassa és flasheli...
(#) Suncorgo válasza zombee hozzászólására (») Feb 5, 2012 /
 
Köszönöm. Pedig ezt csak gyorsan összedobtam.
(#) Suncorgo hozzászólása Feb 5, 2012 /
 
Ez a programozó (STK500v2) a tuxgraphics.org alapján készült.

Mindössze kiegészítettem egy 74HCT125-el leválasztásképp és egy 74HCT08-al közösítem az UART interface-t. Így ha már van FTDI benne akkor lehet használni a géppel való kommunikációra is. Az a 2 vezeték most áthidal mert nincs itthon 7408-am. De ez már részletkérdés. Ezzel a programozóval fektettem meg a most helyrehozni kívánt atmega8-amat. (előfordul)

Ennek a programozónak tegnap délután készült a terve (SCH&PCB 3x kezdtem újra mert nem tetszett ) és éjszaka folyt a beültetés. Letöltöttem a forráskódot, beleírtam a 74125 kezelését és még pluszba egy led kezelést ami pilácsol ha belépett programozó módba.
(#) Suncorgo válasza zombee hozzászólására (») Feb 5, 2012 /
 
Összekötöttem a fuse doctort és az elhalt mega8at.

Tápot adtam a fuse-nak és már egyből zölden világított. Ha nincs benne a mega8 akkor piros. Még azért nyomtam neki gombot is, és az ISP programozó csak ISP freki problémát ír. Van valami ötleted hogyan tovább?
(#) Mezoas válasza zombee hozzászólására (») Feb 6, 2012 /
 
Az összedrótozott verziónál milyen vezetéket használtál? Sima zománcozott rézhuzalt? Ha nem utóbbi, akkor honnan lehet ilyet szerezni? (Én olyannal szoktam, mint a képen az egy szál piros vezeték. Szenvedés...)
(#) Suncorgo válasza Suncorgo hozzászólására (») Feb 6, 2012 /
 
Összekötöttem az FTDI-vel. Megnyitottam a terminalt.

Azt írja hogy OK. Érdekes módon ugyan azt olvasta ki belőle mint amit beleírt, szóval adtam a sz*rnak egy pofont

Akkor kifeküdt belőle a bootloader?

FBD OK.jpg
    
(#) zombee válasza Suncorgo hozzászólására (») Feb 6, 2012 /
 
Ha zöld akkor megjavult, használd egészséggel(mármint a mega8-at).
A drótot régi TV sorkimenő trafójából szedtem. Szerintem lakkos, de a lényeg hogy a páka hője leégesse,
de más, mechanikai behatásra nem sérülhet a szigetelése.
(#) kovacsj válasza zombee hozzászólására (») Feb 6, 2012 /
 
Köszönöm a bootloaderre adott válaszodat!
Én a GSM modul esetében mindkettőt használtam.
Egy részlet:

  1. const char ftppath[] = "AT+QFTPPATH=\"/\"\r\n";
  2. const char ftpput[] = "AT+QFTPPUT=\"upload.txt\",1024,300\r\n";
  3. const char ftpget[] = "AT+QFTPGET=\"download.txt\"\r\n";
  4. const char ftpclose[] = "AT+QFTPCLOSE\r\n";
  5. const char deactivate[] = "AT+QIDEACT\r\n";
(#) TavIR-AVR válasza Suncorgo hozzászólására (») Feb 6, 2012 /
 
Ha volt benne bootloader, akkor igen.
De annyi féle van belőle, mint égen a csillag...

Bascomhoz van pár minta, az Arduino is tartalmaz ilyet készen...
(#) Suncorgo hozzászólása Feb 6, 2012 /
 
Ha ISP felületen akarom programozni, akkor az AVRben gyárilag benne lévő bootloader segítségével programozom nem? Mert ez a mega8 az ISP programozónak nem válaszol. Szóval Doperrel nem tudom programozni, se fuse bitek kiolvasása se a signature olvasása nem megy. Másrészt ha a fuse bit doctor erase tüskéit zárom akkor a teljes flasht törli? Valószínüleg így szállhatott el, hogy az ISP programozó nem látja. Mivel tudok másik bootloader írni bele? Mármint nem a bootloadert megírni hanem betölteni az AVRbe gyári programozón kívül.

Létezik valami "házi" HVPP párhuzamos programozó ami RS232-őn kommunikál?
(#) TavIR-AVR válasza Suncorgo hozzászólására (») Feb 6, 2012 /
 
Nem. gyárilag csak _néhány_ chip tartalmaz bootloadert. Ez pl. a beépített USB-s AVR család (AT90USB; xxxU2, xxxU4 és xxxU6 calád).


HVPP a teljes flash-t EEPROM-ot törli és a FUSE biteket alaphelyzetbe rakja.
Az ISP letiltás módjai:
- Disable RESET (resetláb)
- ISP disable
(#) Suncorgo válasza TavIR-AVR hozzászólására (») Feb 6, 2012 /
 
Értem. Én azt hittem hogy azért lehet ISP-n programozni mert a bootloader.... rosszul hittem.

Megnéztem mit írt be az Fuse bit doctor és a RSTDISBL nincs pipa, az SPIEN pipa elvileg és doperral nem tudom programozni. Akkor meghalt az AVR?

fuse.jpg
    
(#) TavIR-AVR válasza Suncorgo hozzászólására (») Feb 6, 2012 /
 
Doper helyett valami _normális_ programozó mit mond?
STK500, MKII, STK200, Dragon?


Az ISP az a programozási felület. Bootloadernél pl. soros kommunikációval rakod a chipbe. Nem kell külső programozó hozzá....
(#) Suncorgo válasza TavIR-AVR hozzászólására (») Feb 6, 2012 /
 
Csak ez a doper és az STK500as programozóm van. A doper nem jött be, pedig ezzel programoztam fel a fuse bit doctort szóval tuti működik. Mindjárt megnézem az STK500assal. Ez a tuxgraphics féle.
Következő: »»   407 / 840
Bejelentkezés

Belépés

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