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   537 / 840
(#) Melphi válasza TavIR-AVR hozzászólására (») Máj 29, 2013 /
 
Sziasztok, a következő történt a fent mutatott eBay-s égetővel most programoztam 3db eBay-s Atmega8 at, örömmel datálom gond nélkül mentek, ezek után engem meggyőzött a termék, akárki akármit mondhat, bátran ajánlom bárkinek.
Viszont valami kis gond mégis van, ajánlotta TakiG az eXtreme Burner-t, ezzel égettem az Atmega8 akat nagyon le van zanzásítva, vagyis gyors és egyszerű csupán, egyetlen gondja van, az Attiny45 öt nem ismeri. Ebből nincs valami újabb verzió amiben ez is bent van?
Üdv!Lajos
A hozzászólás módosítva: Máj 29, 2013
(#) Sick-Bastard hozzászólása Máj 30, 2013 /
 
Üdv!

Falba ütköztem az AVR és LM335 szenzor ADC átalakításával.
A kód:
  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3. #include <avr/interrupt.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6.  
  7. //ADC
  8. #define Vref            20
  9.  
  10. void Init_ADC(void)
  11. {
  12.         // Set ADMUX Channel for LM335DZ Input
  13.         ADMUX |=  (0<<REFS0) | (0<<REFS1) | (0<<ADLAR);
  14.         ADMUX &= ~((1<<ADLAR) | (1<<REFS1));
  15.         // Initial the ADC Circuit
  16.         ADCSRA |= (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);
  17.         sei();
  18. }
  19. int readADC(char times)
  20. {
  21.     unsigned int avg=0;
  22.     for (char i=0; i<times; i++)
  23.         {
  24.                 ADCSRA |= (1<<ADSC);                            // reset value
  25.                 while (ADCSRA & ( 1<<ADSC));            // wait for measurement
  26.         avg=avg+ADCW;
  27.     }
  28.         avg=avg/times;
  29.         return avg;
  30. }
  31. int main (void)
  32. {
  33. Init_ADC();
  34.        
  35.         while(1)
  36.         {
  37.                 sensor = readADC(10);
  38.                 temp = sensor*Vref;
  39.                 temp = temp/51.2;
  40.                 temp = temp-273;
  41.                 MCPWR(RELAY, GPIOA, temp);
  42.                 _delay_ms(1000);
  43.         }
  44. }


A Vref-et valójában egy 3,6V-os zéner szolgáltatja és multiméteren 4Vot mértem. Azért szoroztam meg még 5-el hogy így a
temp = temp/51.2; sorba
ne temp = temp/10.24; legyen, ne kelljen az AVR-nek századokkal is osztania. (Már ha tud?)

A gondom, hogy nagy az eredmények szórása. Jelenleg 28-32fok között ingadozik a kapott hőmérséklet érték 1mp-en belül.

Az LM335ös kimenetén csupán +/-0,002V az ingadozás(~3,01V), a Vref meg 3,93-3,99V között mozog.

Lehet, hogy maga a tesztpanel generál annyi elektromos mezőt, hogy az bezavar?
Vagy az AVR belső áramköre?

Megoldási javaslatok?
(#) zombee válasza Sick-Bastard hozzászólására (») Máj 30, 2013 /
 
1: AREF lábat stabilizáld 100nF kondival, AVCC-t LC szűrőn keresztül tápláld, AVCC-n lehet 10µF is!
2: Minek a zener? Annak is van jócskán hőmérsékletfüggősége. Akkor inkább TL431!
3: Mérj sokszor, majd átlagolj.
4: Az ADMUX átkapcsolása után várni kell hogy beálljon az új fesz, ezért is venném ki a zenert.
5: Zener helyett inkább a tápfeszt stabilizálnám, pl. LT1117-50 vagy LM317 segítségével.
(#) Sick-Bastard válasza zombee hozzászólására (») Máj 30, 2013 /
 
AREF Stabilizálva, 40uH szűrőn keresztül 220nF kondival
VCC usbről jön, elé egy 1F-os kondit is bekötöttem ill megvan a 10µF-os kondi is + minden IC V+/GND lábnál egy 220nFos kondi.
A 10 mérés az kevés?
Az ADMUX átkapcsolás alatt azt érted, ha másik lábon lévő szenzort szeretnék használni? Vagy ha ott bármit is változtatok?
(#) zombee válasza Sick-Bastard hozzászólására (») Máj 30, 2013 /
 
Idézet:
„AREF Stabilizálva, 40uH szűrőn keresztül 220nF kondival”

Nem AVCC akart lenni? Akkor az AVCC-re megy a zener?
(#) mrd86 hozzászólása Máj 30, 2013 /
 
Nagyon fontos lenne a válasz. Miért van az hogy egy Atmega8-ast PonyProg-al írtam kb 4-5 napja és kiolvasom belőle a tartalmát de amint törölni vagy írni akarom "Unknown device..." és onnantól nem olvas nem ír semmi. Mi lehet a baj ha táp ki/be minden megy, olvassa a fusebiteket de amint vissza akarom állítani belső oscillátorra vagyis írni akarom jön az "Un..." és megint semmi utánna már olvasni sem hajlandó. Táp ki/be és olvasás rendben. Mi lehet a baj ha kizártam magam akkor olvasni sem engedne ha nem tévedek. Válaszotokat és segítségeteket előre is köszönöm.
(#) Sick-Bastard válasza zombee hozzászólására (») Máj 30, 2013 /
 
Üdv!
Közben kicseréltem az usb-s tápot egy 7805CV-re (15V-->5V) így már stabil a táp(5,05V) és nem ugrál 28-32fok között.
(#) Sick-Bastard válasza zombee hozzászólására (») Máj 30, 2013 /
 
Igen, bocsi, AVCC, rosszul írtam.
(#) zombee válasza Sick-Bastard hozzászólására (») Máj 30, 2013 /
 
Az AREF lábra amúgy sem szokás tápfeszt kötni, kivéve ha direktbe kötöd az AVCC-vel. Feszültség referenciát(pl. zener) egy másik ADC csatornára szokás kötni, amivel SZOFTVERBŐL korrigálni lehet az ADC referencia ingadozását(pl. tápfesz nem állítható be pontosan). Ehhez át kell kapcsolni az ADMUX-ot hogy másik vonalon is mérhess. Az átkapcsolás után várni kell X ideig, különben áthallatszik a másik csatorna jele. Ez csak egy lehetőség, nehogy leprogramozd, van ennél egyszerűbb mód!

Problémák az LM335-el:
Gondolom elolvastad az adatlapját, és tudod hogy a kimenő feszültség °C-onként 10mV-ot változik. Ha 5V az ADC referencia, az azt jelenti hogy 10 bites mérésnél kb. 5mV jelent egy lépcsőt ami 0.5 °C. Az a baj hogy az ADC 5-6 egységet simán ugrál a kvantálási és egyéb zajok miatt!

Problémák a programmal:
Az "Init_ADC" szerintem nem túl korrekt az ADMUX-al, pontosabban, nem áttekinthető hogy mit csinál. A két sort én erre az egyre cserélném, az eredmény ugyanaz:
  1. ADMUX =  (0<<REFS0) | (0<<REFS1) | (0<<ADLAR) | 0; //referencia: AREF, nincs ADLAR, ADC0 csat.

Az ADCSRA beállítása sem túl bíztató, a "|="-t cseréld le mezei "="-re!

Javasolt bekötés:
AVCC-t a tekercs és kondi segítségével szűrjed, az AVCC-re tegyél egy precíz referenciát(pl. TL431), és tápláld meg az AVCC feszültségével egy ellenálláson(2.2kOhm) keresztül és 100-220nF kondival stabilizáld! Ezzel a referenciád 2.5V lesz(kb. 4 ezrelékes eltéréssel), amivel a mérési egység is feleződik, 2.5mV-ra (2.048mV/egység). Ha a TL431-et beállítod 2.56V-ra, akkor egy egység pontosan 2.5mV lesz, tehát 0.25°C-os egységekben mérhetsz.
A hozzászólás módosítva: Máj 30, 2013
(#) Melphi válasza mrd86 hozzászólására (») Máj 31, 2013 /
 
Szia sokat nem értek az AVR ekhez, e ez a kis kapcsolás még egyszer sem hagyott cserben, mindenképpen építsd meg!
Üdv! Lajos
Link:http://www.hobbielektronika.hu/cikkek/seged_orajel_generator.html
(#) gabi20 hozzászólása Jún 1, 2013 /
 
Sziasztok valaki tudna segiteni? Újra kellett telepítenem a windowsot most pedig az AVR Studio 4 - et próbálom telepíteni. A gond az hogy a program fordításakor hibaüzenetet kapok és nem tudom hogy mit jelent. Előtte tökéletesen működött. WinAVR - t telepítettem. Előre is köszönöm
A hozzászólás módosítva: Jún 1, 2013

kep.JPG
    
(#) zombee válasza gabi20 hozzászólására (») Jún 1, 2013 /
 
Pedig úgy néz ki mintha a WinAVR nem lenne telepítve. Nézd meg a "project options" résznél,
ott a bal oldali menü legalján (Costom Options) lesz a fordító beállítása. Mit látsz? Lásd az enyém!
Tipp: be tudod állítani a make.exe-t és az avr-gcc.exe-t, de jonnan teszed ha inkább
a WinAVR-t telepíted újra, mert különben más projekteknél is kézzel kell majd beállítani.
A hozzászólás módosítva: Jún 1, 2013

fordito.PNG
    
(#) Zaustuv hozzászólása Jún 1, 2013 /
 
Üdv!

Olyan kérdés jutott eszembe a memóriákkal kapcsolatban, amire nem tudom, hol kaphatnék választ. Vannak különböző adatszóhosszt feldolgozni képes (8/16/32/64) bites mikroprocesszorok és mikrovezérlők. A külső, nem CPU-ba épített memóriák adatai csak rekeszenként olvashatók, és egy rekesz mérete 1 bájt. Azt is tudom, hogy a 16 bites CPU-k mindig 16 bitet olvasnak ki a rekeszből, tehát 2 rekesz tartalmát (a 32 bitesek 4 rekeszét, és így tovább...).
A kérdésem az, hogy gyártanak-e külön olyan memóriákat, amiket direkt 16/32/64 bites mikroprocesszoroknak fejlesztettek ki (és amiken egyszerre csak egy 2/4/8 rekeszes egység címezhető meg, így egy X bájtos memória tejes tartalma kevesebb lábszámmal elérhető)?
(#) rolandgw hozzászólása Jún 1, 2013 /
 
Sziasztok! Terveztem egy Arduino vételt,asm-ben programoztam eddig.Ez a led villogtató kód megingatott kissé
Bővebben: Link
(#) TavIR-AVR válasza rolandgw hozzászólására (») Jún 2, 2013 /
 
Mármint?

Az Arduino ingyenes emailbeni alaptanfolyamot javaslom: Bővebben: Link

Illetve a www.arduino.cc oldalon van pár tutorial.


Ha a kész kód zavar: magaszintű nyelvvel indulsz. Az egyszerű program bonyolultabb lesz (belső initek, rendszerépítés).
ASM-ben TCP/IP-t igaz nem programozol?
Vagy SD kárya kezelést. Vagy I2C memóriát?
Magas szinten a kódírás 1-2 nap, míg ugyanez ASM-ben akár 1-2 hét!

De az Arduino lapka programozható sima ASM-ben is - ha az jobban tetszik....
(#) gabi20 válasza zombee hozzászólására (») Jún 2, 2013 /
 
Köszi szépen aztán sikerült megoldani letöltöttem az AVR Studio egy másik verzióját azzal tökéletesen működik
(#) rolandgw válasza TavIR-AVR hozzászólására (») Jún 2, 2013 /
 
Nem az Arduino-val van problémám, a GCC-n lepődtem meg egy kicsit.Természetesen nagyobb projecteknél már őrület az asm, de megnéztem ugyanezt a kódot Codevision-ben.
3k kontra 0.6 k. Nem tudom,hogy mindenhol ekkora-e a különbség. Persze ennek nem kis ára van,ha igen.
(#) TavIR-AVR válasza rolandgw hozzászólására (») Jún 2, 2013 /
 
Ez nem GCC. Arduino.
A 2 közt _ég és föld_ a különbség.
Trabant és a Mercedes is autó.... Kb. ilyen a hasonlat.
Olvasd el mire készült az Arduino és a mi a filozófiája:
Egy kis Arduino
(#) zombee válasza TavIR-AVR hozzászólására (») Jún 2, 2013 /
 
A Trabant-Mercedes összehasonlítás egy kicsit túlzás. A Trabant felett eljárt az idő,
a GCC meg él és virul. Mondjuk inkább Peugeot? Na ez már tényleg OFF.
(#) TavIR-AVR válasza zombee hozzászólására (») Jún 2, 2013 /
 
OK, Trabant helyett Peugeot...

Végülis ki milyen nyelvet használ, erre azt tanítom:
- mit tanult valamikor, mire tud építkezni (Basic, Pascal, C)
- mi az amiben ha elakad közvetlenül tud segítséget kapni,
- mennyi ideje van a nyelvet megtanulni (tegnapra, diplomamunka, hobbiprojekt, vagy őszre kell egy kerti locsoló)
- mekkora affinitása van hozzá/van-e nyelvérzéke...

Sokan vannak a C mellett: hordozható, támogatott, sok cikk van róla. Én a Basicnál maradtam - ezt ismerem, és jól boldogulok vele. AVR/xMega területen elvagyok vele .
Arduino: gyors, azonnali eredmény - de nem kell megtanulni mélyebben az elektronikát "művészlélek - projektre" ideális.

Ami fontos: a felhazsnálót nem a kód elegáns megoldásai és szépségei érdeklik. Működik az elvárásoknak megfelelően vagy sem...
(#) fifadani hozzászólása Jún 2, 2013 /
 
Sziasztok!
Az egyik fórumtársunk adott egy égető kapcsolást.
Tudnátok segíteni picit?
Magával az áramkör megépítésével nincs gond. De!
Ugye van benne egy atmega8, amit felkellene programozni.
Az upgrade jumpert berakom gondolom.
Tovább... ???

(a zip tartalmazza az összes "hozzávalót")

Köszi!

stk500.rar
    
(#) TavIR-AVR válasza fifadani hozzászólására (») Jún 2, 2013 /
 
Az ATMega8 chipbe a bootloadert egy _független_ kész égetővel be kell rakni már...
Utána és csak a bootloaderes/upgrade frissítés...
(#) fifadani hozzászólása Jún 2, 2013 /
 
És azok az XML fájlok mire valók?
A hozzászólás módosítva: Jún 2, 2013
(#) fifadani hozzászólása Jún 2, 2013 /
 
Illetve ez a megoldás működhet?
Bővebben: Link

Összegezve:
Ezzel a megoldással atmega8-at bootloader-rel feltöltöm.
Majd a megépített áramkörbe berakom, upgrade jumper be, és az AVR Programmer hex-et AVR Studioval beleégetem?
A hozzászólás módosítva: Jún 2, 2013
(#) csabeszq válasza TavIR-AVR hozzászólására (») Jún 2, 2013 /
 
Idézet:
„Ami fontos: a felhazsnálót nem a kód elegáns megoldásai és szépségei érdeklik. Működik az elvárásoknak megfelelően vagy sem...”


Ez AVR esetén igaz lehet, ahol a kód nagysága max 32k. Ha péntek este nekifogok, vasárnap délutánra befejezem.

Egy 1 millió soros programnál már a gyatra minőségű kódot a felhasználó is megérzi: lassabb vagy lehetetlen továbbfejleszteni, több véletlenszerű hiba, lassú működés, nehézkes kezelés. Általánosságban a ronda olvashatatlan kód rossz/használhatatlan programot eredményez. Az AVR a mérete miatt kivétel, 32k-t még assemblyben is át lehet látni.
(#) TavIR-AVR válasza csabeszq hozzászólására (») Jún 2, 2013 /
 
Igen, AVR egyszerű kódokról beszéltem/írtam...

Bár AVR-ben 32k kóddal már weblapszerkesztést/wifi-t is meg lehet borítani... Ott azért kell az átlátható kód. Itt a LED-villogtató, minisziréna, és a kezdő lépések amik esetén nem számít (annyira) a szépség. De a csúnyaság <> trehányság, és átgondolatlanul összeollózott kód!
(#) zombee válasza TavIR-AVR hozzászólására (») Jún 3, 2013 /
 
Az interrupt lemaradt. Vagy azt már nem is kell kezelnie a "játékosnak", csak allokál egy buffert és megcsinálja az UART kezelést a háttérben? Vagy ilyeneken ne gondolkodjon egy modellező?
A hozzászólás módosítva: Jún 3, 2013
(#) TavIR-AVR válasza zombee hozzászólására (») Jún 3, 2013 /
 
Egy most kezdő esetén én a Megszakításkezelést csak 10-12. lecke körül veszem elő. Előbb lássa hogy program, mikrokontroller, a kimenetek terhelhetősége, bemenetek.
Arduino alatt a megszakítás meg nagyon mélyen el van dugva. Nagyjából minden 10. emberben merül fel, hogy a sorosport-kezelés, a delay() illetve számos egyéb "alrendszer"/ alprogram megszakítás alapon megy. Ennek minden előnyével/hátrányával együtt.
Arduino esetén a vételi buffer automatikusan allokálásra kerül, megszakítással együtt. El is visz 64 byte SRAM memóriát azonnal...
ASM-ben meg kialakul az ember fejében a 8-bites gondolkodás
(#) TavIR-AVR válasza fifadani hozzászólására (») Jún 3, 2013 /
 
És az AVR mitől működne - üresen?
OK, belül a sok NOP utasítás végrehajtódik.... De semmi sem történik.

Az FT232 chip önállóan is alkalmas programozásra - vészmegoldásként:FT232RL chip, mint önálló programozó

Vagy STK200/ÉLPT portos 5 szál drót.

Sehogy nem úszod meg a chip felprogramozását...
(#) fifadani hozzászólása Jún 3, 2013 /
 
Hm és ha valakit szépen megkérek, hogy programozza fel nekem?
Elküldöm postán...
Következő: »»   537 / 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