Fórum témák

» Több friss téma
Fórum » AVR programozás mikroC fejlesztőkörnyezetben
Lapozás: OK   1 / 2
(#) edison14 hozzászólása Ápr 26, 2010 /
 
Helló !

Már régóta szeretnék megtanulni AVR processzorokat programozni, de eddig nem volt olyan program amelyben ezt könnyen megtehettem volna. Most egy új barátom által megismertem egy nagyon könnyen használható és profi fejlesztőkörnyezetet mellyel egy hónap alatt LED villogtató és hangszóró csipogtató programok rengetegét készítettem el mindössze pár parancs megtanulásával. Kezdőknek nagyon tudom ajánlani mivel nagyon egyszerű benne a programozás. A programot EZEN az oldalon találjátok meg.

A fórumot azért nyitottam mivel egy-egy új parancs megtanulásakor akadályba ütközöm és itt feltehetem a kérdésem azok számára akik ezzel a fejlesztőkörnyezettel foglalkoznak vagy tanulják. Ezzel egy kis segítséget is szeretnék nyújtani a kezdők számára akik el szeretnék sajátítani a programozás fortélyait de még nem találtak rá arra a fejlesztőkörnyezetre aminek a használata egyszerű és a benne való programozás nagyon könnyű. Íme egy kis ízelítő:

Remélem tetszeni fognak ezek a kis programok. A kérdéseiteket örömmel várom.
(#) Zozi85 válasza edison14 hozzászólására (») Ápr 27, 2010 /
 
Ez egy tényleg nagyon barátságos program, "barátságos C" néven szoktuk emlegetni. Főleg a helpje nagyon kiforrott, nomeg a támogatás se utolsó.... Én már 3 éve barátkozom vele, de szerintem nem kéne a címbe az AVR megjelölés. A legnagyobb előnye épp abban rejlik, hogy gond nélkül átültetheted a programjaidat pic, vagy 8051 re is, ugyan az a környezet és szintaktika fogad.

A help ből bárki megtanulhatja a kezelést, de egy ponton véget ér a kézen fogva vezetés. Aki barátkozik a programmal az nem hagyhatja ki a support fórumot, ott minden idegtépő dologra megtalálhatja a választ, megírhatja a maga moduljait. A letölthető progi majd minden funkcióval bír, csak a program mérete van korlátozva 2 illetve 6k ra. Mindenkinek ajánlom én is aki ismerkedne mikrovezérlővel.
(#) edison14 válasza Zozi85 hozzászólására (») Ápr 27, 2010 /
 
Szia!

Én is a help-ből tanulok de van olyan amit onnan nem lehet megérteni amúgy egy külön fórumot is szeretnék csinálni csak PIC re mert nem szeretném ha össze vissza keverednének az AVR-es és PIC-es programok. Remélem hogy sokan áttérnek erre mivel nagyon egyszerű a használata és kegyetlenül barátságos program. Amúgy egy barátommal készítünk egy cikket a program használatáról valamint az avr és pic-ek bekötéseiről és a programozásáról. Amiket linkeltem programokat azok is benne lesznek mivel egy tanulási folyamatot szeretnénk biztosítani a kezdők és ezt a programot használók számára.
(#) Zozi85 válasza edison14 hozzászólására (») Ápr 27, 2010 /
 
Igen, a help felöleli a tankönyvük példáit is. Sok program vehetne példát róla!
(#) edison14 hozzászólása Máj 22, 2010 /
 
Helló!

Elakadtam az analóg digitális átalakító használatánál. A programot megírtam, az ADC0-ra kötöttem egy 25k-s potmétert aminek az egyik lába a GND-re a másik pedig a VCC-re van húzva valamint az AREF-t lehúztam a GND-re az AVCC-t pedig felhúztam a VCC-re és láss csodát nem ment. Van valami számítás vagy képlet amivel ki kell számolni az ADC bemenetre jutó feszültséget vagy csak én kötöttem be rosszul az AVR-t vagy rosszul írtam meg a programot? Felteszem a programot hátha találtok benne hibát.

  1. unsigned ADC_Read(char channel);
  2. unsigned int adc_rd;
  3.  
  4. void main() {
  5.  
  6.   DDRB = 0xFF;
  7.  
  8. for(;;) {
  9.          adc_rd = ADC_Read(0);
  10.          PORTB = adc_rd;
  11. }
  12. }


A válaszokat és a segítséget előre is köszönöm.
(#) Zozi85 válasza edison14 hozzászólására (») Máj 22, 2010 /
 
Én valahogy így emlékszem rá.
  1. #include <built_in.h>
  2. unsigned int adc_rd;
  3.  
  4. void main() {
  5.  
  6.   DDRB = 0xFF;
  7.   DDRC = 0xFF;  // gondolom 10 bites adc értéket kapsz
  8.  
  9.  
  10. while (1) {
  11.          adc_rd = ADC_Read(0);
  12.          PORTB = adc_rd;       // 8 bit-re kitenni az adc-t
  13.          PORTC = Hi(adc_rd); // a maradék 2 bit a c-re
  14. }
  15. }


Próbáld ki, 0-5 voltig mehet a bemenetre, elvileg más nem kell hozzá csak rákötni a poti kimenetét a lábra és látod az eredményt.
(#) edison14 válasza Zozi85 hozzászólására (») Máj 22, 2010 /
 
Ezt is már próbáltam de nem ment. ATmega8-as procit használok és nem lehet hogy ez a baj mivel ez a program amit te írtál az a help-ben van és ott ATmega32-es proci van. Na még próbálkozom.

Kössz.
(#) Zozi85 válasza edison14 hozzászólására (») Máj 22, 2010 /
 
Az mindegy, a fordító a procinak megfelelően fordítja be. És más program fut rendesen?
Nekem egy frissítés után adódott a probléma, hogy nem akart menni a régen már kitesztelt program. Az okozta, hogy a frissített verzió nem teljesen úgy kezelte a perifériákat mint az elődje, ezzel több lehetőséget adva a beavatkozásra, de a beállításokat magadnak kellett elvégezni.
(#) vilmosd válasza edison14 hozzászólására (») Máj 22, 2010 /
 
Idézet:
„az AREF-t lehúztam a GND-re az AVCC-t pedig felhúztam a VCC-re”
Bocs nem vagyok nagy AVR-es, de a AREF-re kellene adni valami Ref feszt. Pl 5 V. Ez adja az AD-nek a Ref feszt. Vagy nem?
Udv Vili
(#) edison14 válasza Zozi85 hozzászólására (») Máj 22, 2010 /
 
Nem frissítem a fordítót és minden program amit eddig megírtam benne meg az újak is szépen mennek. Nem tudom hogy mi lehet a baj a fuse biteknél nem kell valamit beállítani mert azt olvastam az ATmega8-as adatlapjában az ADC beállításánál hogy az ADEN-t engedélyezni kell (ADC Enable).
(#) Sir-Nyeteg válasza vilmosd hozzászólására (») Máj 22, 2010 /
 
Jól mondod! AREF-et is valamiféle tápra kell kötni! Azt szokták jól megszűrni, pl fojtótekercs, meg kondi pluszban rá. De ez elhagyható, ha nem kritikus.
(#) edison14 válasza vilmosd hozzászólására (») Máj 22, 2010 /
 
Helló !

Igazad van. Ezt kegyetlenül elcsesztem. De még most sem működik rendesen. Ha tekerem felvillan de össze vissza ugrál egyszer az egyik másszor a másik. Ennek mi lehet az oka?
(#) Sir-Nyeteg válasza edison14 hozzászólására (») Máj 22, 2010 /
 
Egy valamit nem értek... mi is villan fel? Nem írtad, hogy mi van a kimenetre kötve...
10db led?
(#) edison14 válasza Sir-Nyeteg hozzászólására (») Máj 22, 2010 /
 
Igen ledek vannak a kimenetre kötve.
(#) Sir-Nyeteg válasza edison14 hozzászólására (») Máj 22, 2010 /
 
Én a mikroC-t nem ismerem még annyira, így csak ez alapján látom a dolgokat. A program többi része nem kell?
Kiolvasás után várni kicsit? Engedélyezni, előosztó, referencia kiválasztása, szabadonfutó, komparálás, stbstb, rengeteg beállítandó bit van még ott. Sok a hibázási lehetőség.
Egy adc változót érdemes lehet létrehozni neki.
Szerintem ennyit tudtam segíteni. Paraméterezésben rengeteg dolog lehet még.
(#) edison14 válasza Sir-Nyeteg hozzászólására (») Máj 22, 2010 /
 
A mikroC-ben nem kellene semmi mást megadni mint amit fent írtam a kódban. Ez áll a program helpjében is. Még valamit megpróbálok és írok ha sikerült.

Az eddigi segítségeteket köszönöm.
(#) Sir-Nyeteg válasza edison14 hozzászólására (») Máj 22, 2010 /
 
Szivesen, máskor is. Viszont azt akkor nem értem, hogy ez hogy működhet. Adatlapban van kb 10 oldal az ADC-ről. És tényleg lehet pl komparátorral is összevonni, belső referenciája is van, 2.54V azt hiszem. Szabadonfutó, vagy nem tudom mi a másik lehetőség. Akkor van olyan, hogy az alsó és felső biteket megfordítja, van olyan, hogy előosztó! Nagyon jó dolog ám! Ezeket is be kéne állítani valahol.
(#) Zozi85 válasza Sir-Nyeteg hozzászólására (») Máj 22, 2010 /
 
Amit ő most használ, az egy belső rutin, ami beállít mindent magának alapértelmezettként. Rengeteg ilyen előre megírt részlet van a programban amit elég csak lehivatkozni, és más gond nincs is vele. ADC-től az i2c-n át a kijelzőkezelésig minden van, ezért szeretik sokan ezt a környezetet.
Ha pedig egyedi beállítások kellenek akkor adatlap és meg kell írni önállóan, beállításokkal.
Sajnos elég érdekes módon működik néhány ilyen kód, futás előtt paramétereződnek fel, és futás után mindent visszaállítanak. Érdemes ezt megjegyezni mert sok pld letiltja az interruptokat ameddig fut.
(#) Sir-Nyeteg válasza Zozi85 hozzászólására (») Máj 22, 2010 /
 
Értem, köszönöm! Tetszik, leegyszerűsít sokmindent, ennek van előnye és hátránya is. Lehet hogy most pont egy hátrányt tapasztaltunk meg.
(#) edison14 hozzászólása Máj 22, 2010 /
 
Helló!

Megvan hogy miért villogtak össze vissza a ledek. A portra bináris adatok érkeztek az ADC-től és én ezt láttam a ledeken. Most dolgozok egy olyan programon amin ahogy tekerem a potit úgy fognak a ledek felvilágítani sorban.
(#) Sir-Nyeteg válasza edison14 hozzászólására (») Máj 22, 2010 /
 
Azt hittem, hogy a kettes számrendszert ismered
Azt hittem, hogy egyszerre néha felvillan...
Érdemes olyan "vezérlést" írni, hogy ha adc > x, akkor valami, ha adc < y akkor másvalami...
(#) edison14 válasza Sir-Nyeteg hozzászólására (») Máj 22, 2010 /
 
Helló!

Megvan:

  1. unsigned ADC_Read(char chanel);
  2. unsigned int adc_rd;
  3. unsigned int jelez;
  4.  
  5. void main() {
  6.  
  7. DDRD = 0xFF;
  8.  
  9. for(;;) {
  10.         adc_rd = ADC_Read(0);
  11.  
  12.         if(adc_rd>=245)         jelez=0xFF;
  13.         if(adc_rd<=5)           jelez=0x00;
  14.         if(adc_rd>20)           jelez=0x01;
  15.         if(adc_rd>50)           jelez=0x02;
  16.         if(adc_rd>80)           jelez=0x04;
  17.         if(adc_rd>110)          jelez=0x08;
  18.         if(adc_rd>140)          jelez=0x10;
  19.         if(adc_rd>170)          jelez=0x20;
  20.         if(adc_rd>200)          jelez=0x40;
  21.         if(adc_rd>230)          jelez=0x80;
  22.        
  23.         PORTD=jelez;
  24.   }
  25. }


Még egyszer köszönöm a segítséget.
(#) Sir-Nyeteg válasza edison14 hozzászólására (») Máj 22, 2010 /
 
Kafa, de érdemes lehet így írni:
  1. if((adc_rd>80)&(adc_rd<111))

Így nem csinál olyan sok felesleges lépést a program. Ha ezt egyből megszokod, akkor a későbbiekben időkritikus programnál sem lesz ez gond.
Pl ha adc_rd értéke 175, akkor 6-szor írja át a jelez változót a program. Ez nem mindig jó. És lassú
Egyébként:
(#) edison14 válasza Sir-Nyeteg hozzászólására (») Máj 22, 2010 /
 
Már ki is javítottam és megint tanultam valamit. KÖSSZ
(#) edison14 hozzászólása Jún 5, 2010 /
 
Helló!

Úgy tudom hogy az AVR processzorokban van belső felhúzó ellenállás de nem tudom hogy szoftveresen hogyan lehet beállítani. Valaki tudna segíteni?
(#) Sir-Nyeteg válasza edison14 hozzászólására (») Jún 5, 2010 /
 
(#) edison14 válasza Sir-Nyeteg hozzászólására (») Jún 5, 2010 /
 
Aha.

Közben rájöttem hogy már régóta tudom hogy hogyan kell beállítani de jó volt meggyőződni arról hogy jól csináltam.

Kössz.
(#) edison14 hozzászólása Jún 28, 2010 /
 
Helló!

Valaki el tudná magyarázni a CASE működését csakmert ezen agyalok már 2 napja.
(#) Programmer válasza edison14 hozzászólására (») Jún 28, 2010 /
 
Case alatt a switch-et érted?
switch (kifejezés)
{
case konstans-kifejezés:
utasítások;
break;

case konstans-kifejezés:
utasítások;
break;

default:
utasításoké
}
Kiértékeli a switch után található kifejezést majd sorra veszi az összes case utáni értéket. Ha a két kifejezés egyenlő, lefut a case utáni kód. Vigyázni kell mert megtörténhet hogy egyszerre több case kifejezés is egyenlő a switch kifejezéssel, ilyenkor ha azt akarod hogy csak az első case fusson le haszálni kell a break utasítást. A default rész akkor fut le ha egy case sem teljesül, elhagyható. Erre gondoltál?
(#) edison14 válasza Programmer hozzászólására (») Jún 28, 2010 /
 
Igen.

Még annyit hogy ha 1-et írok a a switch után a zárójelbe és lesz pl olyanom hogy:

case 1: Lcd_Out(1,1, "Egyes"); break;
case 2: Lcd_Out(1,1, "Kettes");break;

akkor a kijelzőre az Egyes-t fogja kiírni?
Következő: »»   1 / 2
Bejelentkezés

Belépés

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