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   370 / 840
(#) Robi98 válasza Fizikus hozzászólására (») Okt 23, 2011 /
 
Köszönöm az érthető magyarázatot.Majd kipróbálom.
Egyébként olvastam a cikkeidet nagyon tetszik mindegyik, rendkívül érthetően magyaráz.Az egész AVR programozást onnan tanultam(0-ról).
(#) Massawa válasza Robi98 hozzászólására (») Okt 23, 2011 /
 
Bocs, hogy kérdezek. Hol találhatók az emlitett cikkek?
(#) Fizikus válasza Massawa hozzászólására (») Okt 23, 2011 /
 
Az oldal tetejen levo menuben valasszad ki a Kapcsolasok-at, utana meg az AVR-t.
Bővebben: Link
(#) Massawa válasza Fizikus hozzászólására (») Okt 23, 2011 /
 
Kösz, megtaláltam.

(#) mambonr5 hozzászólása Okt 24, 2011 /
 
Sziasztok még új vagyok itt. És máris egy komoly kéréssel fordulnék hozzátok. Van egy feladatom amit sürgősen meg kellene csinálnom de nem nagyon megy A feladat a következő lenne: adot egy atmega 128as mikroprocesszor egy 4*40 karakteres lcd kijelző (pqc4004aw-syl-2) és WinAvr (programmers notepad) nevű programmal kellene életet lehelni bele.. egyszerűbb programokat már tudok kezelni a mikroprocin de a hozzá csatlakoztatott lcd-t nem nagyon sikerül feléleszteni... ha valaki tudna egy egyszerű progit amivel kiiratni tudnék az szuper lenne..
(#) sikolymester válasza mambonr5 hozzászólására (») Okt 24, 2011 /
 
Hát lehet, hogy ráfaragtál, mert splc780d kontroller van benne, ami nem biztos, hogy kompatibilis a HD44870 kontrollerrel, amire viszont sok meglévő avr program van.

Amire neked keresgetned kell ez a splc780d varázsszó. Ha bármilyen C-ben megvalósított drivere van neki, bármilyen uC -re, akkor nyeregben vagy, mert azokat pofon egyszerű már portolni, ha nem akkor viszont kösd fel a gatyád.

Jobb híján túrd át ezt az Adatlapot aztán hajrá
(#) mambonr5 válasza sikolymester hozzászólására (») Okt 24, 2011 /
 
Köszi a segítséget..
(#) UbiLinux hozzászólása Okt 25, 2011 /
 
Hogyan lehet c-ben megvalósítani az alábbi pseudo-assemblyben bemutatott részletet:
org 0
dw label
db nn, xx, yy, zz, stb...
label:
stb. stb.

A kérdés sokkal összetettebb, de a végletekig egyszerűsítettem, így a "miért c-ben" meg "miért nem használok inline assembly-t" kérdéskör csak hosszas mellékvágányokra vinne, így mellőzzük, ha kérhetem.
A kérdésem az, hogyan lehet ezt c-ben megvalósítani.
(#) sikolymester válasza UbiLinux hozzászólására (») Okt 25, 2011 /
 
A tisztánlátás kedvéért: Azt szeretnéd, hogy konkrétan ez a pár sor forduljon C-ből assemblybe?

Melyik C fordítót használod? AVRGCC?
(#) trudnai válasza UbiLinux hozzászólására (») Okt 25, 2011 /
 
Szia, a pointerekre vagy mas neven mutatokra keress ra es a tombokre a kedvenc C konyvedben. Tenyleg nem bantasbol irom, de ezek annyira alap kerdesek, hogy nem latom ertelmet itt kitargyalni -- kiveve ha konkret kerdesed van, mint pl csinaltal egy C kodot az olvasottak alapjan es nem mukodik vagy nem ugy ahogy szeretned es vegkepp nem erted hol a problema...
(#) boomerang hozzászólása Okt 25, 2011 /
 
Szervusztok !

AVR Studio 4-ben miért van az, hogy a uC órajelét tudom állítani a "Current Configuration Options"-nál, meg amikor megnyitom a programozó ablakot akkor a"Fuses" fül alatt is ? Két különböző értékre is tudom tenni őket...szóval nem értem ezt a dolgot.
Köszönöm szépen a segítő válaszokat.
(#) zolee1209 válasza boomerang hozzászólására (») Okt 25, 2011 /
 
A config options-nál a szimulátor órajelét állítod be úgymond, így láthatod/számolhatod/ellenőrizheted a programod működését, míg a FUSE biteknél már a mikrovezérlő órajelét állítod be, mint órajel forrás helye, típusa, vagy frekvenciatartománya. Én ennyit tudok ehhez hozzáfűzni.
(#) boomerang válasza zolee1209 hozzászólására (») Okt 25, 2011 /
 
És az normális, hogy a 8Mhz-en beállított egyszerű delay késleltetések 1Mhz-en nyolcszorosára nőnek a panelen ?
Elvileg logikus, de azért furcsállom mert így egy megírt 10ms-os késleltetés a valóságban 80ms.
(#) sikolymester válasza zolee1209 hozzászólására (») Okt 25, 2011 / 1
 
Annyival még kiegészíteném, hogy az a F_CPU compiler switchet is állítja a Makefileban. Magyarra fordítva: Ha van egy delay függvényed, aminek kell tudni fordítási időben, hogy mennyi az órajele az AVR-nek, akkor az ebből a compiler switch-ből fogja tudni. Nagyjából olyan ez, hogy onnan tudja a fordító azt is, hogy a "kötelező" #include -ból melyik AVR típusának az io.h -ját includeolja.

Na már most, hogyha a fordító azt hiszi, hogy 1MHz-en jár az AVR, mert te a project optionsban ezt mondtad neki, de te viszont a fuseoknál 8MHz-re állítod, akkor a delayed 8-szor gyorsabban fog lefutni. Ha egy led villogód van, akkor tehát 8-szor gyorsabban fog villogni.
(#) boomerang válasza sikolymester hozzászólására (») Okt 25, 2011 /
 
Nah ez volt az én gondom. Most már vágom, köszönöm.
(#) röntgen válasza boomerang hozzászólására (») Okt 26, 2011 /
 
Ez pontosan úgy van ahogy gondolod.
(#) CzLaci válasza Robi98 hozzászólására (») Okt 27, 2011 /
 
Én csináltam egy ilyen kapcsolást attiny45-el, fényerőszabályozással, alvó üzemmóddal, automata kikapcsolással. Egy mini lámpát csináltam belőle, 3,6V-os akkuval megy és egy nyomógomb van rajta.
(#) mario1111 hozzászólása Okt 28, 2011 /
 
Üdv!

Segítséget szeretnék kérni tőletek. Egy olyan cuccot készítek, ami feszültség és áram értékeket loggol SD kártyára. A proci egy ATMGA324A. Először azzal szenvedtem,h túl régi volt az AVR Studio-m és nem ismerte ezt a procit. A listából így nem ezt hanem a P-s verziót (ATMEGA324P) választottam. Ez volt a projectnél is beállítva. Bár panaszkodott rá mégis működött az sd kártya, az lcd kijelző is és az uart is. Aztán frissítettem a stúdiót és az mkII-t is. Ekkor a delay.h -ra panaszkodott, h integert kap.... az is megoldódott. Most már lehet A-végződésűt választani, de mint kiderült azzal nem megy. Ha azt választom, akkor minden hülyeséget ír az lcd-re és nem megy semmi sem rendesen. Visszaállítva a projektet P-re megint jó lesz. Van valakinek valami ötlete azon kívül,h programozzam P-ként?

Márió
(#) TavIR-AVR válasza mario1111 hozzászólására (») Okt 28, 2011 /
 
A P-s és a sima nem ugyanaz! mas az ICk belso felepitese reszben...
Az AVRstudio Free. Mi tart vissza, hogy frissites (4.19 a regebbi sorozat, 5.0 az ujabb)

Kod nelkul eleg necces... a header es egyeb allomanyokat nem piszkaltad? ott is lehet hiba igy...
(#) Topi válasza TavIR-AVR hozzászólására (») Okt 28, 2011 /
 
Frissítéssel csak óvatosan, mert nagyon sok gyári AVR ISP mkII és AVR Dragon verzió teljesen működés képtelen a jelenlegi AVR Studio 5 verzióval.

Ha követed a bugreport és fejlesztési naplókat, akkor látható, hogy dolgoznak a problémán.
(#) mario1111 válasza TavIR-AVR hozzászólására (») Okt 28, 2011 /
 
Eddig 4.17-est használtam (asszem) ott nem volt gond, de nem ismerte a procit. Erre frissítettem, aminek következtében szinte semmi sem működött. Tool chain frissítés... Aztán el kezdett kötekedni a delay.h miatt. Ha csak egy szimpla alverzió frissítés ekkora szenvedés, akkor vajon mi történhet majd ha 4-esről 5-ösre váltok
A delay header-t cseréltem, mert neten rákerestem és más is volt így már. Amit letöltöttem az meg '@' karaktert tartalmazott, akkor meg arra kiabált :S Amikor az is megoldódott, akkor meg jött ez,h p-ként megy a-ként meg meghal.
(#) sikolymester válasza mario1111 hozzászólására (») Okt 28, 2011 /
 
Melyik WinAVR verziót használod amúgy?

Javaslom ott is a legfrissebb használatát.
(#) mario1111 válasza sikolymester hozzászólására (») Okt 28, 2011 /
 
Üdv!

WinAVR-20100110-est. De nem találtam újabbat.
(#) mario1111 válasza mario1111 hozzászólására (») Okt 28, 2011 /
 
Sikerült megoldani. A win-avr make-jére és gcc-re kellett állítani az external toolsnál. Ezt már próbáltam korábban is de nem ment, mert nem a megfelelő gcc.exe volt beállítva :S A toolchainre állítva pedig a korábban említett hibákat produkálta.

Kösz a helpet!

Márió
(#) Robi98 hozzászólása Okt 28, 2011 /
 
Sziasztok!
Írtam egy nagyon egyszerű programot,(hogy kipróbáljam magam a PWM-ezésben) aminek az lenne a célja, hogy erősíti egy led fényét, majd elhalványítja.
A végeredmény kicsit eltérő lett:A led egyfolytában világít.
Nem tudom, hogy mi lehet a hiba.
Íme a kód:
  1. #include <avr/io.h>
  2.  
  3. int main(void){//FŐ PROGRAM KEZDETE
  4.  
  5. PORTB|=(1<<PB1);//PB1 KIMENET
  6.  
  7. TCCR1A=(1<<WGM10)|(1<<COM1A1);//NEM INVERTÁLT, GYORS PWM
  8.  
  9. TCCR1B|=(1<<CS10);//1-ES ELŐOSZTÁS
  10.  
  11. while(1){//VÁRAKOZÓCIKLUS KEZDETE
  12.  
  13. OCR1A=0b00000000;//AZ OUTPUT COMPARE REGISZTER KEZDŐÉRTÉKE 0
  14.  
  15. while(OCR1A){//HA AZ OUTPUT COMPARE REGISZTER ÉRTÉKE 0...
  16.  
  17. OCR1A++;//AKKOR NÖVELJÜK
  18. };//VÁRAKOZÓCIKLUS VÉGE
  19.  
  20. OCR1A=0b10000000;//AZ OCR1A KEZDŐÉRTÉKE 8
  21.  
  22. while(OCR1A){//HA ELÉRTE A 8-AT...
  23.  
  24. OCR1A--;//CSÖKKENTJÜK
  25. };//VÁRAKOZÓCIKLUS VÉGE
  26.  
  27. };//VÉGTELEN CIKLUS VÉGE
  28. return(0);//a visszatérési érték 0
  29. };//A FŐPROGRAM VÉGE
(#) Ricsi89 válasza Robi98 hozzászólására (») Okt 28, 2011 /
 
Namost több hiba is van.
A while ciklus az akkor zajlik le, ha a megadott változó nem nulla. Tehát te alapból nullát adsz meg, ezzel az első while nem csinál semmit, ugyanígy a másodiknál.
A másik.
  1. OCR1A=0b10000000;//AZ OCR1A KEZDŐÉRTÉKE 8

Ezt hogy? Ez nem 8, hanem 128.
Tehát a while-os sorokat gondolt végig még egyszer. Akkor hajtódik végre a while, ha az utána írt változó értéke nem nulla. Használd egy kicsit az agyadat.
(#) Reggie válasza Robi98 hozzászólására (») Okt 28, 2011 /
 
A 17. sor sosem fog vegrehajtodni, mert OCR1A=0 eseten a while-ban levo kif. hamis lesz, igy folytatodik a 20. sornal.

A while fuggvenyekbe nem artana valami delay is, mert hiaba irod at az OCR erteket, ha nem tud odaig elszamolni a szamlalo.
(#) Robi98 válasza Ricsi89 hozzászólására (») Okt 28, 2011 /
 
Akkor, hogy ha nincs 0-ás kezdőérték a while ciklusoknál, akkor milyen módszerrel oldjam meg?
Köszi!
(#) kiborg hozzászólása Okt 28, 2011 /
 
Hali Mindenkinek!
Egy számomra érthetetlen problémával fordulnék a társaság felé.
A rendszerem azt a tünetet produkálja, hogy ha egy darab vezetékkel hozzáérek a GND-hez (a vezeték másik fele a levegőben lóg) akkor kihal az egész.
Az egész egy 12V-os kapcstápról megy, után egy 7805 (előtte-utána kondi) egy ATMega16 5V-ról és hozzá kapcsolódik egy VFD ami ugyan 12V-s, de a vezérlője 5V-s. (a GND közös) A protoboardon 4-5 db elszórt 100nF kondi.A vezérlő SPI-n tartja a kapcsolatot a kijelzővel.
Mi okozhatja a tünetet?
Üdv Kiborg
(#) Ricsi89 válasza Robi98 hozzászólására (») Okt 28, 2011 /
 
Egy olyan feltétel kell a while-ba, ami akkor lesz nulla, amikor azt szeretnéd, hogy lépjen ki a while-ból. Például:
  1. while(OCR1A!=128)

Tehát amíg a változó nem egyenlő 128-al, addig benne marad a while-ban, mert addig 1 az érték.
Következő: »»   370 / 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