Fórum témák

» Több friss téma
Fórum » Bascom-AVR
 
Témaindító: puli122, idő: Ápr 11, 2010
Lapozás: OK   1 / 18
(#) puli122 hozzászólása Ápr 11, 2010 /
 
Sziasztok!
Nagy örömömre egyre több szó esik az avr-ekről többek között itt a fórumon is. Ez a téma részben beleférne az AVR - Miértek, hogyanok... topikba, de úgy gondoltam jó lenne összegezni a Bascom-AVR-el kapcsolatos ismereteket. Gondolok itt a QBasic nyelvre, illetve a program specifikációira. Az alap Avr-es kérdéseket továbbra is az AVR - Miértek, hogyanok... topikban tegyétek föl!

Ahhoz hogy el tudj kezdeni a Bascom-ban programozni, nagy segítség lehet a már annyit emlegetett Tavir-os Bascom könyv, mindenkinek ajánlom átolvasásra!
(#) puli122 hozzászólása Ápr 11, 2010 /
 
És akkor az 1. kérdés:

Meg szeretném oldani hogy az adc0 értéke kiíródjon az lcd-re.
Íme a program:

  1. $regfile = "m8def.dat"
  2.   $crystal = 8000000
  3.  
  4. Config Lcd = 24 * 2
  5. Config Lcdpin = Pin , Db4 = Portb.0 , Rs = Portb.1 , Db6 = Portb.5 , E = Portb.2 , Db5 = Portb.3 , Db7 = Portb.4.
  6. Config Lcdmode = Port
  7.  
  8. Config Adc = Single , Prescaler = Auto
  9. Start Adc
  10.  
  11. Dim W As Word
  12.  
  13. Do
  14.     W = Getadc(0)
  15.    Cls
  16.  
  17.    Lcd " value " ; W
  18.     Wait 1
  19.  
  20. Loop
  21. End


Nem tudom mi a hiba de mindig 1023-at ír ki, bárhova tekerem a hozzá kapcsolt potit.
(#) Zuzmo_farok válasza puli122 hozzászólására (») Ápr 11, 2010 /
 
szia.
Én nem használtam ezt a progit, csak fusebitekhez, de van egy ötletem.
Általában konfigolni kell, hogy melyik port melyik pinje ki vagy bemenet legyen, és ezen kívül, hogy fel, vagy lehúzva legyen.

Lehetséges, hogy kimenetként van definiálva, vagy be van kapcsolva a pull up resistor. és kapja az adc-d az 5V-ot
(#) puli122 válasza Zuzmo_farok hozzászólására (») Ápr 11, 2010 /
 
Igen, erre gondoltam és is de mivel a mintaprogramban sincs definiálva a port ki vagy bemenetnek, így gondoltam nem kell.
(#) GrandF válasza puli122 hozzászólására (») Ápr 11, 2010 /
 
Szia!
Első körben állítsd be az adc referenciafeszét, mert anélkül nem hiszem, hogy működni fog.
Bascom súgóban tudod megnézni hogy mit, és hova.

Portok állapota: alapból mindegyik port bemenet, de tényleg nem ártana ezt is konfigolni.

szerk: Az AVR Aref lábára mi van kötve?
(#) puli122 válasza GrandF hozzászólására (») Ápr 11, 2010 /
 
Az Aref láb volt elkötve valóban. Így már működik. Köszi
(#) gabi20 válasza puli122 hozzászólására (») Ápr 11, 2010 /
 
Szevasz!
Meg tudnál engem szánni egy valamilyen LED villogtató programmal ATmega8 - hoz (HEX fájl kellene). Megpróbálnám ezt beégetni ,hogy működik-e.
Hálásan kösz
(#) puli122 válasza gabi20 hozzászólására (») Ápr 11, 2010 /
 
Hello,

Itt a program:
  1. $regfile = "m8def.dat"
  2.  
  3.    Config Portb = Output
  4.    Config Portc = Output
  5.    Config Portd = Output
  6.  
  7.    Do
  8.  
  9.    Portb = 255
  10.    Portc = 255
  11.    Portd = 255
  12.  
  13.    Waitms 500
  14.  
  15.    Portb = 0
  16.    Portc = 0
  17.    Portd = 0
  18.  
  19.    Waitms 500
  20.    Loop


Fél másodpercenként kapcsolgat minden portot föl-le.
Hex csatolva

test.HEX
    
(#) gabi20 válasza puli122 hozzászólására (») Ápr 11, 2010 /
 
Kösz, mindjárt kipróbálom
(#) gabi20 válasza puli122 hozzászólására (») Ápr 11, 2010 /
 
Ezzel működik!

Mostmár akkor csak azt nem értem hogy az én LED villogtatómmal miért nem
(#) puli122 válasza gabi20 hozzászólására (») Ápr 11, 2010 /
 
Másold be amit írtál
(#) gabi20 válasza puli122 hozzászólására (») Ápr 11, 2010 /
 
Megnyitottam azt a gépi kódot amit küldtél (kép1).
Ezután azt a forráskódot amit írtál beleírtam bascomba, lefordíttam, és szintén megnyitotam azt a gépi kódot (kép2). Láss csodát a két gépi kód nem egyforma!
Rosszul van beállítva a fordítóm?
(#) icserny válasza gabi20 hozzászólására (») Ápr 11, 2010 /
 
A bájt-sorrend (endianness) különbözik.
(#) puli122 válasza gabi20 hozzászólására (») Ápr 11, 2010 /
 
illeszd be a forráskódot, fordítsd le, égesd be, és kiderül azzal is működik-e.
(#) gabi20 válasza icserny hozzászólására (») Ápr 11, 2010 /
 
És ezt a bájt sorrendet valahol meg lehet változtatni?
Egyébként az előbb újratelepítetem a bascomot, hátha visszatér alapbeállításba, de ugyanezt csinálja.
(#) gabi20 válasza puli122 hozzászólására (») Ápr 11, 2010 /
 
A forráskódot már bemásoltam bascomba, de fordításkor a bájtokat össze vissza írja ki. Tuti hogy emiatt nem működik
(#) puli122 válasza gabi20 hozzászólására (») Ápr 11, 2010 /
 
Most akkor tisztázzuk. Mást látsz de működik vagy nem is működik. Másold be a forráskódot, fordítsd le, égesd be, és nézd meg hogy működik-e függetlenül attól hogy mit ír ki.
(#) gabi20 válasza puli122 hozzászólására (») Ápr 11, 2010 /
 
Az a HEX fájl amit küldtél az működik.
Az a forráskód amit írtál azt
( így kezdődik: $regfile = "m8def.dat")
én is beírtam bascomba, lefordítottam beégettem azzal nem működik. Egymás mellé tettem azt a HEX fájlat amit küldtél meg amit én fordítottam és a kettő nem ugyanaz (a bájtok nem ugyanabban a sorrendben vannak)
Remélem így már érthető voltam
(#) puli122 válasza gabi20 hozzászólására (») Ápr 11, 2010 /
 
ahha, így már értem, és nem tudom mi lehet a hiba. bascom beállításaiban kéne turkálni, bár én nem állítottam át semmit és ment. Taviros könyv elejét nézd át, ott vannak beállítások.
(#) gabi20 válasza puli122 hozzászólására (») Ápr 11, 2010 /
 
Köszi, átnézem
(#) puli122 hozzászólása Ápr 11, 2010 /
 
Sziasztok

Eljutottam egy feladatig amit nem tudok megoldani. LED fényerejét kellene pwm-el szabályozni. Hogyan csináljam ?
Esetleg van példaprogramja valakinek?
(#) GrandF válasza puli122 hozzászólására (») Ápr 11, 2010 /
 
Példaprogramom ugyan nincs, de nem olyan nagy ördöngösség a dolog.
Hardveres PWM-nél kinézel magadnak egy olyan timer-t aminek van PWM módja (ezt az adott AVR adatlapjában találod meg). A ledet a timer komparáló kimenetére teszed (OCnx, de adatlapban benne van).
Bascomban így állítod be:
  1. Config timerx = pwm, prescale = /amit akarsz/ , Compare x Pwm = clear down

kitöltési tényezőt pedig így állítod (mindkét megoldás jó):
  1. comparenx = 100
  2. pwmnx = 100

Mással nem kell törődnöd, mert a Bascom elintézi magának.
Jelen esetben az n az az adott timer 'számát' jelenti, az x pedig a timer valamelyik komparátorát.
Ha valami nem világos, akkor tanulmányozd mind az AVR adatlapját, mind pedig a Bascom súgóját.
(#) puli122 válasza GrandF hozzászólására (») Ápr 12, 2010 /
 
Megoldottam

Mega8-hoz pwm vezérlés minta:

  1. '--- alapadatok ---
  2. $regfile = "m8def.dat"
  3. $crystal = 8000000
  4.  
  5. Config Timer1 = Pwm , Compare A Pwm = Clear Down , Prescale = 64       'Timer1 pwm funkció
  6.  
  7. Config Adc = Single , Prescaler = Auto                      'ADC konfigurálás
  8. Start Adc
  9.  
  10. Dim Cs1 As Word                                             'Változó deklarálás
  11.  
  12. Do
  13.    Cs1 = Getadc(0)                                          'Adc0 beolvasása
  14.   Pwm1a = Cs1 / 4                                          'Pwm1a = adco értéke /4
  15. Loop
  16. End
(#) GrandF válasza puli122 hozzászólására (») Ápr 12, 2010 /
 

Tudom, hogy 1 szakadt szmájlit nem kellene, de így sikerült.
(#) hpmaster válasza puli122 hozzászólására (») Ápr 14, 2010 /
 
Csak úgy zárójelben jegyezném meg, hogy az adc 4-el való osztása nem mindíg jó eredményt ad. Ha pl egy potival szeretnéd szabályozni egy LED fényerejét, akkor van korrektebb megoldás:

  1. $regfile="m8def.dat"
  2.  
  3. Config Timer1 = PWM, PWM = 10 , Compare A PWM = Clear Down , Prescale = 64
  4. Start Timer1
  5.  
  6. Config ADC = Single , Prescaler = Auto
  7. Start ADC
  8.  
  9. Dim W as WORD
  10.  
  11. Do
  12. W = Getadc(0)
  13. Pwm1a = W
  14. Loop
  15. End


A PWM-et lehet működtetni 8, 9 illetve 10 bites módban is. Így könnyebb az adatok kezelése.
(#) puli122 válasza hpmaster hozzászólására (») Ápr 14, 2010 /
 
És itt mit jelent a PWM=10 ? Mert ha jól látom a konfigurációnál csak ebben tér el
(#) hpmaster válasza puli122 hozzászólására (») Ápr 14, 2010 /
 
Mint írtam, tud működni 8, 9, illetve 10 bites módban is.
Alapesetben (ha nem írod oda hogy PWM = 8|9|10) 8bites módban kezeli a PWM-et.
Ekkor ugyebár 0-255-ig adhatsz neki értéket.
9bites esetben 0-511-ig (ezt ritkán használjuk)
10bites esetben pedig 0-1023-ig. (ez egyezik az ADC adatméretével, lévén, hogy az is 10bites)
(#) hpmaster hozzászólása Ápr 14, 2010 /
 
Tehát hogy a kérdésre válaszoljak:
PWM = 10 résznél állítod be, hogy10bites legyen a PWM.
(#) puli122 válasza hpmaster hozzászólására (») Ápr 14, 2010 /
 
Áhhá, így már teljesen világos. Köszi
(#) gabi20 hozzászólása Ápr 17, 2010 /
 
Üdv a szakértőknek!
Van egy olyan problémám hogy a PORTC értékét be szeretném olvasni, és LCD kijelzőre kiíratni ATmega8 - ban:
Idézet:
„$regfile = "m8def.dat" ' chip
$crystal = 8000000 ' frekvencia
Config Portc = Input
Portc = 255
Dim A As Byte

Cls
Cursor Off
Do
A = Portc
Locate 2 , 1
Lcd " PORTC = "
Lcd A
Loop
End”

Szimulátorban kipróbáltam, ott működött, gyakorlatban állandóan 63 ír ki a kijelző. Van valakinek valami ötlete, hogy mi lehet a hiba?
Következő: »»   1 / 18
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