Bascom basic och Mega48
Bascom basic och Mega48
Skulle börjaleka med en av ADC'erna i meg48'an o håller på att försöka lära mig bascom basicen...
tända o fadea massa lysdioder var ju inga problem..
nu tänkte jag ha en potentiometer för att reglera hastigheten på dom.
men så innan jag börjar löda så tänkte jag göra ett testprogram för att köra i simulatorn i bascom.
den kod som finns med som demo "kör" ju fint i simulatorn med "m163def.dat" definitionen.. men om jag ändrar till: "m48def.dat" för mega48 så fungerar inte koden längre utan den stannar på "getadc (channel)" i följande kod:
$regfile = "m48def.dat"
Config Adc = Single , Prescaler = Auto
Start Adc
Dim W As Word , Channel As Byte
Channel = 0
Do
W = Getadc(channel) <--- här stannar koden
Print "Channel " ; Channel ; " value " ; W
Incr Channel
If Channel > 7 Then Channel = 0
Loop
En simulering utan hårdvara SKA ju fungera..
tända o fadea massa lysdioder var ju inga problem..
nu tänkte jag ha en potentiometer för att reglera hastigheten på dom.
men så innan jag börjar löda så tänkte jag göra ett testprogram för att köra i simulatorn i bascom.
den kod som finns med som demo "kör" ju fint i simulatorn med "m163def.dat" definitionen.. men om jag ändrar till: "m48def.dat" för mega48 så fungerar inte koden längre utan den stannar på "getadc (channel)" i följande kod:
$regfile = "m48def.dat"
Config Adc = Single , Prescaler = Auto
Start Adc
Dim W As Word , Channel As Byte
Channel = 0
Do
W = Getadc(channel) <--- här stannar koden
Print "Channel " ; Channel ; " value " ; W
Incr Channel
If Channel > 7 Then Channel = 0
Loop
En simulering utan hårdvara SKA ju fungera..
kanske ska lägga till en
$crystal = 8000000
eller vad du nu använder för hastighet..
hmm.. ska man inte ange vilken referens som används?
tex:
dessutom verkar det som man bara kommer åt ADC 0-5 på DIP versionen
av mega48
$crystal = 8000000
eller vad du nu använder för hastighet..
hmm.. ska man inte ange vilken referens som används?
tex:
Kod: Markera allt
Config Adc = Single , Prescaler = Auto , Reference = Internal
av mega48
självklart
Ja ok jag skulle väl skrivit det också.. Jo jag använder $crystal = 8000000
Men crystal kommandot verkar inte spela så stor roll.. det ställer bara in så bascom vet timing på looopar å så.. den påverkar inte alls frekvensen på chipet.. som är 1mhz o-fusead.
Referens fungarar (finns) bara i vissa AVR'er..
om det finns i 48'an vet jag inte än, men det spelar ingen roll för koden funkar inte ändå.
och att bara 0-5 kan kommas åt spelar heller igen roll eftersom koden aldrig hinner komma så långt så den ökar upp channel.
den stannar alltså DIREKT på w= getaadc (x)
Men crystal kommandot verkar inte spela så stor roll.. det ställer bara in så bascom vet timing på looopar å så.. den påverkar inte alls frekvensen på chipet.. som är 1mhz o-fusead.
Referens fungarar (finns) bara i vissa AVR'er..
om det finns i 48'an vet jag inte än, men det spelar ingen roll för koden funkar inte ändå.
och att bara 0-5 kan kommas åt spelar heller igen roll eftersom koden aldrig hinner komma så långt så den ökar upp channel.
den stannar alltså DIREKT på w= getaadc (x)
funkar inte här
eftersom jag kör mega48'an's pwm kanaler så funkar det inte.
För med "m8def.dat" får jag fel på de rader som har med pwm'en att göra.
fungerar i verkligheten? chipet menar du? chipet funkar ja (den blinkar leds just nu) . men eftersom jag inte kan få igång ADC'n (ens i simulering) så kan jag inte testa mitt bygge heller.
För med "m8def.dat" får jag fel på de rader som har med pwm'en att göra.
fungerar i verkligheten? chipet menar du? chipet funkar ja (den blinkar leds just nu) . men eftersom jag inte kan få igång ADC'n (ens i simulering) så kan jag inte testa mitt bygge heller.
jag har provat ja..
helt dött.. om adc'n funka så borde ju dioderna blinka som fan eller inte alls (0,255 eller vilket värde som helst) när där inte är nån pot inkopplad.
serieporten??
öhh?
koden däruppe läser bara in värdena från adc'n till ett print kommando.
print kommandot syns ju barai emulatorn.. o kör jag med den def filen i exemplet fungerar det ju.. det är så fort jag ärndrar till mega48'ans def fil som det slutar fungera.
hårdvaran är ju inte inkopplad alls så jag kan ju inte egentligen mäta några värden
men om koden körs i emulatorn så ska den ju loopa o visa "0" i värdet precis som exemplet gör.
kan inte någon ladda in någon av adc demona o kolla? kör det först med default def fil.. prova sen o ändra till m48def.dat istället.
koden däruppe läser bara in värdena från adc'n till ett print kommando.
print kommandot syns ju barai emulatorn.. o kör jag med den def filen i exemplet fungerar det ju.. det är så fort jag ärndrar till mega48'ans def fil som det slutar fungera.
hårdvaran är ju inte inkopplad alls så jag kan ju inte egentligen mäta några värden

kan inte någon ladda in någon av adc demona o kolla? kör det först med default def fil.. prova sen o ändra till m48def.dat istället.
Jag har testat din kod och får samma fel. Jag har postat ett inlägg på bascoms forum om buggen och dom skulle titta på det.
Angående printkommandot så fungerar den i verkligheten också
, om man kopplar RXD/TXD till serieporten (via buffert) så kan man få texten i realtid. Mycket användbart för debuging.
Man kan även reglera ADC:n i simulatorn. Där finns en "rullista" och en väljare för adc-kanal.
Angående printkommandot så fungerar den i verkligheten också

Man kan även reglera ADC:n i simulatorn. Där finns en "rullista" och en väljare för adc-kanal.
skumt
haah hmm så jag har hittat en bugg som ingen annan gjort än? låter ju otroligt. jag som bara lekt med avr o bascom i en knapp vecka.
prövade kompilera o flasha i chipet med adc koden.. stendött.. jag hoppar från mainloopen till de raderna med adc koden.. inte ett skit händer.. OM programmet funka så ska ju programmet bara gå förbi o fortsätta blinka dioder.. men inget händer. inte ett blink ens.
så jag tänkte kanske en signal MÅSTE finna på adc porten.. så jag
kopplat in 1 pot nu.. på pin 21,22,23 .. om det nu är rätt för adc 0 (aref, gnd, adc0).
fortfarande inget liv..
kan det vara så att bascom inte funkar alls med adc'n?
prövade kompilera o flasha i chipet med adc koden.. stendött.. jag hoppar från mainloopen till de raderna med adc koden.. inte ett skit händer.. OM programmet funka så ska ju programmet bara gå förbi o fortsätta blinka dioder.. men inget händer. inte ett blink ens.
så jag tänkte kanske en signal MÅSTE finna på adc porten.. så jag
kopplat in 1 pot nu.. på pin 21,22,23 .. om det nu är rätt för adc 0 (aref, gnd, adc0).
fortfarande inget liv..
kan det vara så att bascom inte funkar alls med adc'n?
jag har en basic-kod som bara fadear upp o ner lysdioder..
i den koden vill jag ha en avläsning av ADC'n där värdet anger hur lång en
fördröjning ska vara.
typ förenklat:
do
fade'a upp o ner lysdioder
läs av adc'n (värdet ska användas i fördröjningen)
gosub fördröjning
loop
fördröjning:
waitms (adc värdet)
(ELLER en vanlig for,next loop istället för waitms)
return
tyvärr funkar ju inte "waitus" med variabler
men bry er inte om vad jag gör i programmet, ADC koden funkar ju inte ens i bascom utan hårdvara.
i den koden vill jag ha en avläsning av ADC'n där värdet anger hur lång en
fördröjning ska vara.
typ förenklat:
do
fade'a upp o ner lysdioder
läs av adc'n (värdet ska användas i fördröjningen)
gosub fördröjning
loop
fördröjning:
waitms (adc värdet)
(ELLER en vanlig for,next loop istället för waitms)
return
tyvärr funkar ju inte "waitus" med variabler

men bry er inte om vad jag gör i programmet, ADC koden funkar ju inte ens i bascom utan hårdvara.