Fórum témák
» Több friss téma |
Fórum » Bascom-AVR
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!
É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:
Nem tudom mi a hiba de mindig 1023-at ír ki, bárhova tekerem a hozzá kapcsolt potit.
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
Igen, erre gondoltam és is de mivel a mintaprogramban sincs definiálva a port ki vagy bemenetnek, így gondoltam nem kell.
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?
Az Aref láb volt elkötve valóban. Így már működik. Köszi
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
Hello,
Itt a program:
Fél másodpercenként kapcsolgat minden portot föl-le. Hex csatolva
Ezzel működik!
Mostmár akkor csak azt nem értem hogy az én LED villogtatómmal miért nem
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?
A bájt-sorrend (endianness) különbözik.
illeszd be a forráskódot, fordítsd le, égesd be, és kiderül azzal is működik-e.
É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.
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
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.
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
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.
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?
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:
kitöltési tényezőt pedig így állítod (mindkét megoldás jó):
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.
Megoldottam
Mega8-hoz pwm vezérlés minta:
Tudom, hogy 1 szakadt szmájlit nem kellene, de így sikerült.
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:
A PWM-et lehet működtetni 8, 9 illetve 10 bites módban is. Így könnyebb az adatok kezelése.
És itt mit jelent a PWM=10 ? Mert ha jól látom a konfigurációnál csak ebben tér el
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)
Tehát hogy a kérdésre válaszoljak:
PWM = 10 résznél állítod be, hogy10bites legyen a PWM.
Áhhá, így már teljesen világos. Köszi
Ü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? |
Bejelentkezés
Hirdetés |