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   122 / 840
(#) TavIR-AVR válasza Mumtaz hozzászólására (») Máj 8, 2009 /
 
7805 bemeneti fesztartománya: 7V...32V.
Ez alatt esik rajta 1.5V....


A normal STK200 esetén a céláramkörből veszed a +5V-t.... Fontos! Ezzel így 3.3V-s rendszereket nem fogsz tudni programozni!
(#) zsuscsinyo hozzászólása Máj 8, 2009 /
 
Sziasztok!

Az volna a kérdésem, hogy szükséges-e jelszint illesztés a következő Flash memóriához, ha 5V-tal hajtom meg az AVR-t: AT45DB041 Bővebben: Link

Az adatlapot olvasgatva ezt találtam 33. oldalon:

Idézet:
„All Input Voltages (including NC Pins)
with Respect to Ground ...................................-0.6V to +6.25V”


Ez most valóban annyi, mert akkor közvetlen rá tudnám illeszteni?
A válaszokat előre is köszönöm!
(#) szilva válasza zsuscsinyo hozzászólására (») Máj 8, 2009 /
 
Az az abszolút maximum, amit károsodás nélkül elvisel. Kicsit lejjebb is nézz, máris látni fogod:

DC and AC Operating Range
VCC Power Supply 2.5V to 3.6V 2.7V to 3.6V

Azaz a garantált működés tápfeszültségtartományának felső határa 3.6V.
(#) saca84 hozzászólása Máj 8, 2009 /
 
Sziasztok!

Lenne szives valaki nekem,mint kezdőnek közérthető nyelven leírni hogyan tudok elérni 30-60 másodperces késleltetéseket atmega 128 al?
winavr-t használok.az util/delay függvénnyel csak ms-okat tudok elérni.

Segítségeteket előre is köszönöm!
(#) ddr válasza saca84 hozzászólására (») Máj 8, 2009 /
 
A _delay_ms úgy tudom, 65 536 ms-ig tud max. késleltetni, tehát pont jó még neked. 60 000 ms = 60 sec
Csak ilyenkor a cpu foglalva van (nem tud mást csinálni a késleltetés alatt), ezért célszerűbb inkább timert beállítani. Persze ha ez nem probléma, akkor jó a delay is.
(#) gtk válasza saca84 hozzászólására (») Máj 8, 2009 /
 
Ezt timerrel lenne celszeru. Vagy 1 masodperces idoalapot csinalsz, (itt a topicban volt szo rola tobbszor is) es szamolod egy valtozoban a masodperceket.
Vagy, pl: a 16 bites timer 256 eloosztoval 8MHz-el 2.1sec -onkent tulcsordul (1 / (8 000 000 / 256 / 65536) ). Timer megszakitasban egy valtozoban szamolod a megszakitasokat. Ez esetben az ido (T) = megszakitasok szama*2.1 sec-al.
(#) ddr válasza ddr hozzászólására (») Máj 8, 2009 /
 
Bocsánat, rosszul emlékeztem, csak 65.535 ms. Akkor marad a timer, ha megmondod hány mhz-en fut a proc, ki lehet számolni.
(#) zsuscsinyo válasza szilva hozzászólására (») Máj 8, 2009 /
 
Azt tudom hogy a tápfesz max 3.6V lehet, csak a bemenő jelre voltam kiváncsi.
(#) gtk válasza zsuscsinyo hozzászólására (») Máj 8, 2009 /
 
VIL Input Low Voltage Max VCC x 0.3 V
VIH Input High Voltage Min VCC x 0.7 V
VCC Power Supply 2.5V to 3.6V 2.7V to 3.6V
Ha 5V-rol megy a tobbi, keress hozza egy szintilleszto IC-t.
A VIH Max erteke altalaban a tapfeszultsegnel nem lehet nagyobb.
(#) zsuscsinyo válasza gtk hozzászólására (») Máj 8, 2009 /
 
Köszi!
(#) TavIR-AVR válasza zsuscsinyo hozzászólására (») Máj 8, 2009 /
 
http://www.hestore.hu/files/AT45DB041D.pdf

33. oldal, lap alja:
"2. All inputs are 5 volts tolerant."

Azaz NEM kell jelszintillesztés hozzá, de a tápfeszje ne legyen 3.6V felett.
(#) wg_kezdo válasza TavIR-AVR hozzászólására (») Máj 8, 2009 /
 
Köszi. éppen ezzel kísérletezem.

Másik kérdés, hogy milyen pontos az analóg bemenete pl az ATTiny45-nek?
Kerestem az adatlapjában, de vagy átsiklottam felette vagy nincs benne.
LED-et szeretnék fényerő mérésére használni.
(#) gtk válasza TavIR-AVR hozzászólására (») Máj 8, 2009 /
 
Csak egy sorral kellett volna lennebb olvasnom...
(#) Mumtaz válasza TavIR-AVR hozzászólására (») Máj 8, 2009 /
 
Azt tudom, hogy a céláramkörből veszi. A rajzon is az alap STK200 van, csak külön esetre van rajta dip foglalat és külső áramforrás. Elvileg a terv az volt, hogy céláramkör esetén onnan vegye az 5V-ot, de a dip foglalat esetén (céláramkör híján) külső adapterről is lehessen használni.
(#) zsuscsinyo válasza TavIR-AVR hozzászólására (») Máj 8, 2009 /
 
Köszönöm szépen a választ! gtk-nak is mivel foglalkozott a problémámmal!
(#) kendre256 válasza wg_kezdo hozzászólására (») Máj 8, 2009 /
 
A doksija 17.1 pontjában van.
Absolute accuracy +-2LSB, 10 bit, Uref 1,1V vagy 2,56V mellett.
A legnagyobb pontossága ezekből szerintem +- 2*1,1V /1024=+- 2,14 mV
(#) fg hozzászólása Máj 8, 2009 /
 
Sziasztok!

Egy nagyon idegesítő hibával találtam szembe magam:

ATmega128-at programozok (AVR studio, winAVR).
A legfőbb cél az energiatakarékosság. Maga a prgram elég sok holtidővel fut, amit természetesen hardveres időzítéssel oldottam meg, megfejelve azzal, hogy addig power save állapotba altatom a mikrokontrollert. ilyen függvényeim pl.

/********************************
* 15 ms delay with:
* TIMER 0, 32768HZ asynch. op. prescaler value:8, ticks: 62
********************************/

void pwrsave_15ms (void);


/********************************
* 300 ms delay with:
* TIMER 0, 32768HZ asynch. op. prescaler value:64, ticks: 154
********************************/

void pwrsave_300ms (void);

Ezek látszólag tök jól működnek, de elkezdtem használni a TWI-t. Erre előre megírt, kipróbált függvényeket használok, ebben a projectben viszont nem működött. A Hiba behatárolása után arra jutottam, hogy akkor fagy ki, amikor a program a TWINT-re vár, ami nem érkezik meg más a start bit kihelyezése után sem. Először hardverhibára gyanakodtam, de nem az.
A TWI ugyanis tökéletesen működik, ha _előtte_ semmilyen fenti "altató" függvényt nem hívtam meg. Ha már lefutott egy ilyen időzített alvás, utána már lefagy.

Egy ilyen függvény:

void pwrsave_1ms (void)
{
ASSR=0x08; // Setting AS0=1
TCNT0=223; // Set the counter initial value 223 (256-33)
loop_until_flag_is_clear(ASSR,2);
TCCR0=0x01; // Set TIMER0 prescaler to CLK/1
loop_until_flag_is_clear(ASSR,0);



TIMSK=_BV(TOIE0); // Enable TIMER0 overflow interrupt
sei();
MCUCR=0x38; // Sleep enable, Mode: power save
sleep_mode();

// After the interrupt
//cli(); // Disabling interrupt
TCCR0=0x00; // Stopping TCNT0
}

Ez miért nyírja ki a TWI-t?

(#) fg válasza fg hozzászólására (») Máj 9, 2009 /
 
... bár szerintem e körül a sleep körül nagyon benézhettem valamit, mert sleep_mode();-nak semmi értelme, elvileg sleep_cpu(); kell. Az a vicc, hogy ezt hónapokon át nem vettem észre, csak most, hogy beírtam ide.

Szerk: a problémát ez sem oldja meg.
(#) Sir-Nyeteg hozzászólása Máj 9, 2009 /
 
Üdv!
Globális változóként ezt használom:
  1. volatile int8_t a=1;

De ez csak 256-ig tud értéket felvenni. Hogyan tudom ezt megnövelni? Milyen változót használjak? C programozási tudatlanságom.
(#) Polip111 hozzászólása Máj 9, 2009 /
 
Sziasztok!

Megépítettem az Rc szervó tesztert, nagyon tetszik.
Szeretném azonban egy picit módosítani, mégpedig úgy, hogy lenne beépítve még egy szervo csatlakozó.
Az erre csatlakoztatott szervó azonban ellenkező irányba térne ki mint a másik csatlakozón levő.

Megoldható ez?
Amennyiben igen, ebben kérném a segítségeteket.

Üdv.: Polip
(#) Sir-Nyeteg válasza Polip111 hozzászólására (») Máj 9, 2009 /
 
Természetesen megoldható, a szoftvert kell módosítani, méghozzá annyiban, hogy egy másik kimenetet úgy állítunk be, hogy inverz szervó-jelet adjon ki.
Azaz: eredeti szervó jel ugyebár 1ms-ot ad ki, és a poti állásától függően még valamennyit hozzáad, max 1ms-ot. Így lesz 2ms-os impulzus.
Ugyanez kell neked, csak a 2ms-ból vond ki a poti állását, így max helyzetben eljutsz az 1ms-ig. És ennyi időre kapcsold be a kimenetet.
(#) Polip111 válasza Sir-Nyeteg hozzászólására (») Máj 9, 2009 /
 
Köszönöm a gyors segítséget, küldtem egy levelet az e-mail címedre hogy további segítséget kérjek.

Üdv: Polip
(#) IMi válasza Sir-Nyeteg hozzászólására (») Máj 9, 2009 /
 
Hello!
Nézz szét a libc user manualban a 58. oldal 6.8 fejezetben .
(#) IMi válasza IMi hozzászólására (») Máj 9, 2009 /
 
Bocsánat, lemaradt:
avr-libc Reference Manual 1.6.2 pdf formátumra igaz az oldal és fejezet szám
(#) vzoole válasza Sir-Nyeteg hozzászólására (») Máj 9, 2009 /
 
char
//8 bites változó
//-128…127
unsigned char
//8 bites változó
//0…255

short
//16 bites változó
//-32,768…32,767
unsigned short
//16 bites változó
//0…65,535

int
//16 bites változó
//-32,768…32,767
unsigned int
//16 bites változó
//0…65,535

long int
//32 bites változó
//-2,147,483,648…2,147,483,647
unsigned long int
//32 bites változó
//0…4,294,967,295

long long int
//64 bites változó
//- 9,223,372,036,854,775,808…9,223,372,036,854,775,807
unsigned long long int
//64 bites változó
//0…18,446,744,073,709,551,615

float
//32 bites változó
//1.2E-38…3.4E-38
//megközelítőleg 7 tizedes pontosság

double
//64 bites változó
//2.2E-308…1.8E-308
//megközelítőleg 19 tizedes pontosság

Eezket java ismereteim és netes írások alapján állítottam össze.
Int néhol 32 bitesnek, máshol meg 16 bitesnek volt feltüntetve. Ebbe kérnék egy pontosítást.

Mai napig nem tudom pontosan mi is ezek pontosan:
pl.: uint8_t
Sejtésem szerint unsigned int 8 bites méretűre korlátozva.
De még itt se kaptam konkrét választ (vagy nem jól kerestem):
avr-libc reference manual
(#) Sir-Nyeteg válasza vzoole hozzászólására (») Máj 9, 2009 /
 
Imi megoldása alapján:
User manual
56. oldal
(#) zsuscsinyo hozzászólása Máj 9, 2009 /
 
Egy újabb problémám merült fel a flash memóriámmal kapcsolatban. Az adatlapban a 39. oldalon lévő 22.2-es ábra szerint az opcode után rögtön jön a címzés, míg az előtte lévőn, a 22.1-es ábrán a 16 bit-et (Don't care) be kell shiftelni.

A 30. oldalon a táblázatban (256byte/page) a 83H opcode után 5 bit-et (Don't care), majdcsak ezután jön a Page címzés. A képeket csatoltam a jobb szemléltetés érdekében. Remélem érthető amit tisztázni szeretnék!


A válaszokat köszönöm!

Az adatlap: AT45DB041D
(#) Mumtaz válasza Mumtaz hozzászólására (») Máj 9, 2009 /
 
Össze raktam a cuccot. Egyelőre csak a DIP tokos részt, a többit nem. Hálózati adapterről némi segédlettel sikerült stabil 5V-ot adni neki. PonyProg-ban tesztet nyomtam az programozóra. "Test OK", bár ezt nagyon nem érdekli, hogy éppen rá van-e kapcsolva a tápfesz, vagy nincs. Egy ATtiny2313-at beletoltam a foglalatba, de csak hibát ad vissza ("Device missing or unknown device (-24)).

Én nem értek ezekhez a dolgokhoz, csak azért akarom megcsinálni, hogy netről lekapott cuccokat tudjak megépíteni és felprogramozni. Tavalyelőtt csináltam ATmega16-al PC-re joystick vezérlőt, amihez megépítettem egy STK200-at. Azt alakítottam most át, illetve építettem át, de a DIP tokba dugott ARV IC-t nem ismeri fel.

Most egyéb motyóhoz szedtem le kapcsolási rajzot és C-ben írt kódot, de ez a cucc nem tartalmaz csatlakozót a programozáshoz és nem is akarok rátenni, mivel csak egyszer kell felprogramozni, és kész.
Ezért gondolkodtam, hogy ne kelljen külön a céláramkörön is buherálni, hanem simán az STK200-on lévő DIP foglalatban felprogramozni és kész.
(#) Sir-Nyeteg hozzászólása Máj 9, 2009 /
 
Szeretnék segítséget kérni. RS232-AVR egyszerű kommunikációt szeretnék megvalósítani modulok között.
Napok óta keresgélek, de sajna nyelvtudásom hiányossága miatt nem nagyon vágom hogyan kéne gyakorlatban megoldani a szoftvert.
Amiket eddig találtam:
Bővebben: Link itt a 3. hozzászólás 2. linkje szép, de nem tudom hogyan irjam át.
Bővebben: Link Itt szoftvert nem találtam, de jónak tűnik az usb-s megvalósítás is. Nem kell kiegészítő áramkör.
Max 232 beépítése nem gond. Maga a szoftver az, amire szükségem lenne. Katalógust is rengeteget tanulmányoztam, de sajna a webes fordító sem ad érthető szöveget.
Lényegében 1-2 változó értékét szeretném átküldeni egy központi egységbe. Gondoltam szalagkábelre is, párhuzamosan, csak sajna nem elég megbízható zavar szempontjából. Vagy az is megoldható lenne? max 8méteres a táv.
Esetleg nyissak új topikot erre a témára?
(#) Mumtaz válasza Mumtaz hozzászólására (») Máj 10, 2009 /
 
Mivel kellene ezt a cuccot kiegészíteni, hogy működjön?
Mikor a joystick vezérlőt programoztam, ott a programozó csati és az ATmega16 között minden szálon 330 Ohmos ellenállások voltak, de a céláramkörön. Más nem volt, csak ugyanez a programozó.
Ezeknek az ellenállásoknak volt valami szerepük a programozásban is olyan értelemben, hogy a hiányuk esetleg meghiúsítja a programozást?

Nem tudom, mit tegyek.

stk200.jpg
    
Következő: »»   122 / 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