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   208 / 841
(#) gabi20 válasza puli122 hozzászólására (») Ápr 9, 2010 /
 
Most már tud a gépem rendesen kommunikálni az AVR - el.
Átállítottam INT.OSC - ra, beprogramozom, minden OK.
Ha visszaolvasom a programot, megint EXT.Crystalt ír ki. Ez normális
(#) puli122 válasza gabi20 hozzászólására (») Ápr 9, 2010 /
 
Nem.
Fusebiteknél jobbra a Write Fs-re rányomtál ?
(#) gabi20 válasza puli122 hozzászólására (») Ápr 9, 2010 /
 
Igen most megnyomtam a WRITE FS gombot, most már megváltoztatta a fuse biteket. :yes:
De valahogyan még mindig nem akar elindulni az AVR
Valamelyik portd - re kötötem voltmérőt, folyamatosan 0 - at mutat
(#) Amarton hozzászólása Ápr 10, 2010 /
 
PIC után most elkezdtem foglalkozni az AVR-ekkel.
Van egy ATmega128L mikrokontrollerem.

Az adatlap azt írja, hogy az összes porton van belső felhúzó ellenállás.
A C portra akartam volna a felhúzást megcsinálni.
Az adatlapból az derül ki, hogyha a DDR-t 0-ra állítom, akkor az bemenet (fordítva, mint a PIC esetében).
Ha ezek után a PINC regisztert 1-be állítom és az SFIOR,PUD regiszter 0-ban van, akkor bekapcsolom a felhúzást.
Na most ez nekem sehogy sem akar működni. Folyamatosan 0 V-van a bemeneteken a PORTC.

Az AVR-es adatlapok siralmasan rosszabbul olvasható, mint a PIC-es, így lehet valami elkerülte a figyelmemet.
(#) trudnai válasza Amarton hozzászólására (») Ápr 10, 2010 /
 
Szerintem a PORTC regiszterbe kellene 1-et tenned, hogy a felhuzast bekapcsold, nem a PINC-t...

Idezet az adatlapbol:
Idézet:
„If PORTxn is written logic one when the pin is configured as an input pin, the pull-up resistor is activated. To switch the pull-up resistor off, PORTxn has to be written logic zero or the pin has to be configured as an output pin. The port pins are tri-stated when a Reset condition becomes active, even if no clocks are running.”
(#) Amarton válasza trudnai hozzászólására (») Ápr 10, 2010 /
 
Én is ugyan ezt olvastam, csak fogalmam sincs, hogy miért írtam PINC-t.
Természetesen működik
Köszi. Figyelmetlen voltam.
(#) gabi20 hozzászólása Ápr 10, 2010 /
 
Üdv mindenkinek!
Készítettem egy egyszerű bekötést ATmega8 - al. Egy LED dióda van bekötve valamelyik portra (kép) aminek villognia kéne, de valahogyan nem teszi ezt. Belső oszcillátort használok, ezt remélem jól állítottam be a fuse bitekben (kép). Kommunikáció az AVR és a PC között működik, az AVR is működőképes. Szerintetek mi lehet a gond?
(#) puli122 válasza gabi20 hozzászólására (») Ápr 10, 2010 /
 
Idézet:
„valamelyik portra”

De arra a portra amit vezérelsz ?

Fuse bitek jók !
(#) mlhe_vr hozzászólása Ápr 10, 2010 /
 
Lenne egy nagyon amatőr kérdés:
Ha van egy sok fájból álló forráskód, abból hogyan lehet egy hex fájlt csinálni avr be való beégetéshez. A chip több funkciót is tud, meg usb illesztő is van rajta, ezért van (gondolom) ennyi fájl- Az eredeti fájlnévben található elnevezéseket akarom csak módosítani, hogy ne olyan néven jelenjen meg az eszközkezelőben, ahogy eredetileg. A fórráskódokat tartalmazó fájlokban megtaláltam hol kell átírni, de nem tudom hogy lehet "vissza"alakíani hexbe, hogy be lehessen tölteni a prociba.
(#) zaik válasza mlhe_vr hozzászólására (») Ápr 10, 2010 /
 
Szervusz,
gyakorlati oldaláról megközelítve a kérdést
így megoldhatod, elméleti oldalról megközelítve a kérdést -amennyiben érdekel- azt javasolnám, hogy nézz utána a programozás alapjainak.
(#) adamtui_93 hozzászólása Ápr 11, 2010 /
 
Hali
Az lenne a kérdésem hogy bascom alatt atmega 32 chipet milyen néven találom?
(#) TavIR-AVR válasza adamtui_93 hozzászólására (») Ápr 11, 2010 /
 
ATMega 32 vagy Mega32.

$chip="m32def.dat"
(#) adamtui_93 válasza TavIR-AVR hozzászólására (») Ápr 11, 2010 /
 
hali kiprobáltam azzal de azzal sem ment stk 500am van avr studió alól müködik minden de igy meg sem mucan
(#) adamtui_93 hozzászólása Ápr 11, 2010 /
 
Hali sikerült beálitani de rájöttem hogy a C-t valamelyest jobban értem és inkább egyenlöre annál maradok de van egy olyan problémám hogy valaki létszives szemléltese egy példaprogramon keresztül hogy ha pl PIN0 lábon lévö gombot megnyomom akkor a PORTB 1 es lábon a led világitson de csak addig mig nyomom és ha nem nagy kérés akkor egy olyat is ami meg ha már nem nyomom utánna is világit.
(#) puli122 válasza adamtui_93 hozzászólására (») Ápr 11, 2010 /
 
bascomban:

portd.0 -> gomb
portb.1 -> led

  1. Config Portb = Output
  2.  Config Portd = Input
  3.  
  4.  Do
  5.  
  6.  If Pind.0 = 0 Then
  7.  
  8.  Portb.1 = 1
  9.  
  10.  Else
  11.  
  12.  Portb.1 = 0
  13.  
  14.  End If
  15.  
  16.  Loop


amikor nyomod világít

szerk: ha ezt kitörlöd megkapod a másik variációt is
  1. Else
  2.  Portb.1 = 0
(#) adamtui_93 hozzászólása Ápr 11, 2010 /
 
Köszönöm a válaszod erre gondoltam csak nem bascomban mint már elöbb irtam "rájöttem hogy a C-t valamelyest jobban értem és inkább egyenlöre annál maradok" de mind 1 köszi a segitséget de ha megtudná valaki irni C ben annak még jobban örülnék
(#) trudnai válasza adamtui_93 hozzászólására (») Ápr 11, 2010 /
 
A logikajat csak megerted, es ez alapjan mar nyilvan nem gond megirni a programot C-ben...
(#) adamtui_93 válasza trudnai hozzászólására (») Ápr 11, 2010 /
 
a logikáját értem csak azt nem hogy hogyan "hivom" be hogy megvizsgálja a PINCt ( szoval lényegében azt nem mit irjak az if után )

u.i.:épp azért kértem hogy mintaprogramon keresztül mutasa meg valaki hogy megértsem
(#) (Felhasználó 4577) válasza adamtui_93 hozzászólására (») Ápr 11, 2010 /
 
Pl.: PINC 5 megvizsgálása:
  1. !(PINB & (1<<PB0))

Ekkor azt vizsgálod, hogy magas szinten van-e.
Ezt beleteszed egy IF-be feltételnek, végrehajtani meg azt, hogy tegye magas szintre a lábat, amire a LED-et kötöd, különben alacsony szintre.
Személy szerint nem szeretem ezeket az "írj meg egy programot..."-al kezdődő mondatokat.
Írd meg Te, és ha elakadsz szívesen segítünk. Ha mindent megcsinálnak helyetted, sose fogod megtanulni, mindenki így kezdte, az ember a saját bőrén tanul a legjobban.
Tehát kezdd el és amikor elakadsz írsz a fórumba és segítünk.
Kezdő lökésnek annyit, hogy megadtam a port figyelést, port szint állítást a PORTx (x helyére a port betűjele), 0 alacsony, 1 magas szint, port ki/bemenet konfigurálás DDRx, 0 be, 1ki, és WinAVR-be ne felejtsd el beállítani, hogy milyen AVR-el dolgozol és hány MHz-en fut, a Fuse bitek pedig jók a gyári beállítással is.
Egyébként ezek nagyrésze benne van az adatlapban, érdemes először azt olvasgatni, működését, memóriák, órajelforrás, tápfeszültség, stb.
(#) TavIR-AVR válasza adamtui_93 hozzászólására (») Ápr 11, 2010 /
 
Kezdőknek én a Bascom-ot ajánlom.
A C nyelv logikaja bonyolultabb, a chip belsejet regiszter szinten kell sokszor ismerni. ezt a Bascom eldugja eloled.... (ha nem akarod, nem kell megismerni)
(#) (Felhasználó 4577) válasza TavIR-AVR hozzászólására (») Ápr 11, 2010 /
 
Idézet:
„A C nyelv logikaja bonyolultabb, a chip belsejet regiszter szinten kell sokszor ismerni. ezt a Bascom eldugja eloled.... (ha nem akarod, nem kell megismerni)”

Ebben igazad van. Viszont nem nagy dolog megtanulni, megérteni, és csak egyszer kell megérteni.
(#) trudnai válasza adamtui_93 hozzászólására (») Ápr 11, 2010 /
 
Olvasd el szerintem a Nyolc labbal c. cikk sorozatot, hogy kapj egy kis alapot. Menj a Kapcsolasok / AVR -re es ott megtalalod a cikket...
(#) mrbini hozzászólása Ápr 11, 2010 /
 
Üdv Mindenkinek!
Segítségeteket szeretném kérni.
Két AVR-t szeretnék felprogramozni az egyikhez van forráskód a másikhoz pedig megvan a hex-file csak nem tudom a fuse bitek beállítását.
Segítséget előre is köszönöm.
(#) adamtui_93 válasza (Felhasználó 4577) hozzászólására (») Ápr 11, 2010 /
 
hali már a kimeneti beállitások mennek, kissebb programokat is irtam már, mint irtad ne egy kész programot várjak ez igaz ez a programomnak egy része de ezt nem értettem belöle.

am köszi a segitséget
(#) Barbár válasza slowhand hozzászólására (») Ápr 11, 2010 /
 
Én is keresgettem a hétvégén drivereket, és én is ezt fogom megpróbálni, de lenne egy kérdésem:

Ez a driver is (mint a legtöbb amit neten találtam) HD44780 kompatibilis LCD-hez való.

Viszont nézegettem a HE store -ban LCD kijelzőket (16x1 -es, vagy 16x2 -es kellene (inkább az utóbbi)), de nem tudom, hogy melyik "HD - kompatibilis" és melyik nem.

Ennek, hogy lehetne utánajárni?


Előre is köszi a segítséget!

Üdv!

András
(#) slowhand válasza Barbár hozzászólására (») Ápr 12, 2010 /
 
Ha egy meghatározott feladatról van szó, nem kötelező a HD44780 kompatibilitás. Adatlapot átnézed, és választasz egy olyat ami neked szimpatikus. Egyébként elsőre úgy látom, hogy még a COG-ok is "kényszeríthetőek" a HD44780-ra (bár ezt tüzetesebben meg kellene nézni), de azoknak van SPI interfésze is, én inkább azt használnám. Tegnap volt egy kis időm, ezt a drivert is át kell írni (legalábbis én úgy látom). Innentől kezdve mindegy mit írsz meg.
(#) Barbár válasza slowhand hozzászólására (») Ápr 12, 2010 /
 
Nagyjából értem, csak az a baj, h én nem tudok és nem is akarok semmilyen drivert átírni.

Akarok egy 16x2-es kijelzőt venni amivel működik az említett driver, csak az a baj, hogy nem tudom h a HEstoreban melyik kijelző ilyen, és azt sem tudom, hogy ezt hol lehetne megnézni...

Ebben tudna valaki segíteni?
(#) adamtui_93 hozzászólása Ápr 12, 2010 /
 
int main(void) {

DDRB = (0b00000111);

while(1)
if ( PINA & (0b01110000))
if ( PINC & (0b00000110))

KEK_KI;

else

KEK_BE;

return 0;
}

csináltam egy probapanelt kisérletezésere. De azt hogy birom megcsinálni hogy a akkor világitson a led amikor PINA-ra és a PINC-re is igaz mert igy azt csinálja hogy ha PINC nem igaz és PINA igaz akkor világit de minden más esetben nem világit
(#) (Felhasználó 4577) válasza adamtui_93 hozzászólására (») Ápr 12, 2010 /
 
Használd a kód gombot és jobban figyelj oda a helyesírásodra.

  1. int main(void) {
  2.  
  3. DDRB = (1<<PB1); // PB1, mint kimenet, többi bemenet
  4. PORTB |= (1<<PB0); // PB0 bemeneten a felhúzóellenállás bekapcsolása
  5.  
  6. while(1) // Végtelenciklus
  7. {
  8. if (!(PINB & (1<<PB0))) // A feltétel igaz, ha a PB0 alacsony szinten van
  9. PORTB |= (1<<PB1); // PB1 magas szintre, a feltétel igaz
  10. else
  11. PORTB &= ~(1<<PB1); // PB1 alacsony szintre, a feltétel hamis
  12. }
  13.  
  14. return 0;
  15. }


A nyomógombot a test és a PB0 közé kösd, a LED-et egy 470 Ohm-os ellenálláson keresztül a PB1-re, az AVR-t 5V-ról tápláld.
Az AVR Studio lehet, hogy nem fog örülni az ékezetes kommenteknek.
(#) adamtui_93 hozzászólása Ápr 12, 2010 /
 
Hali nem azzal van a gondom hogy nem világit mert világit csak az a baj hogy olyat szeretnék hogy csak akkor világitson ha PINA és PINC is igaz mert ha két & jelet teszek közé akkor
if ( PINA & (0b01110000) && PINC & (0b00000110))
ha PINA igaz akkor világit ha PINB igaz akkor is világit de csak akkor kéne ha világítana ha mind a kettő igaz
Következő: »»   208 / 841
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