Mikrokontrollerens finurlige verden
Onsdag 2005-03-16 samlet vi oss igjen, først på Kattelabben (som
visstnok er for de tøffe guttene sammenliknet med Fiskelabben). Første
problem var at Dag Håkon hadde glemt strømadapteren til
mikrokontrolleren, så Stian måtte løpe og låne en tilsvarende adapter
ifra IT-seksjonen.
De som arbeidet med kontrolleren denne
dagen var Dag Håkon, Torbjørn og Stian. Hvis jeg husker rett. Egentlig
var vel Erlend og Andreas også involvert når ting begynte å bli
merkeligere.
Igjen kom vi bort i rare serieportproblemer. Vi
prøvde å dumpe dataene ifra kameraet, og på merkelig vis så ble dette
bare 1020 byte istedet for de ca 10.000 vi ventet. Alle iherdige forsøk
på å dekode dette med programmer som Photoshop eller Gimp viste seg
nyttesløse. I de tilfeller hvor man fikk et bilde ut dreide det seg om
enkeltstående linjer som hadde en fin gradering.
Videre
forsøk på å bare skrive ut "xxxxxxxx..." istedet for bildedata gav også
litt rare resultater, her fikk man istedet "abcdefgh..." - litt
merkelig. Mikrokontrolleren kan altså leve sitt eget liv. Det kunne i
det hele tatt virke som om denne såkalte kompilatoren syntes det var
helt OK å plassere flere variabler på samme minneområde, noe som førte
til litt merkelig programflyt og enda rarere resultater.
Utover
dagen satte vi oss på sanntidslabben, som var helt ledig. Her gjorde vi
to oppdagelser. Den ene var at vi målte med oscilloskopet (mest for
gøy) klokken på mikrokontrolleren. Istedet for 8 MHz var denne 3,71
MHz. En kamerat av Stian som var på labben kom bort og kunne bekrefte
at det hele nok kjørte på 3,71 MHz. Vi sjekket også opp databladene på
STK500 og STK501, og joda, ganske riktig. Dette 8 MHz-greiene må vi ha
innbilt oss.
Dette førte til at alle utregninger for
serieporthastighet var helt på syre. Ny kalkulasjoner ble utført, og nå
ble seriekommunikasjonen klokkestabil. Ikke et tegn gikk tapt, og alt
kom riktig frem. "Linjestøyen" var borte med en gang.
Det
andre tipset kom da Stian spurte om disse "High memory
address"-pinnene. Det var riktig at de skulle stå tilsluttet slik de
stod nå, det var nemlig slik at man kunne velge å bruke disse som
dataporter hvis man ikke hadde bruk for mer minne. Men den viktige
detaljen var at man også måtte koble til "SRAM enable"-biten. Den hadde
vi glemt!
Ved å koble til den så det ut til at ting fungerte
en god del bedre. Nå gikk både forsøk på å lagre "xxxx" og "abcdefg"
(denne gang med vilje) i det utvidede minnet kjempefint. Dog må man
selv fortsatt si char *image = 0x1100; - kompilatoren er fortsatt
helt på syre hvis man prøver seg på noe så naivt som char image[10000];.
Det
er fortsatt problemer, dog, denne gangen enda rarere. Når man bruker
read_image() istedet for å bare lagre "x"-er eller alfabetet, så
oppfører programmet seg merkelig. Enten henger det, eller så går det i
evig loop hvor den hopper tilbake til "Initialiserer"-biten. Dette
lukter at stacken er overskrevet eller noe sånt siden programflyten er
helt på syre. Jeg vet ikke om dette er innstillinger i kompilatoren
eller ikke.
Stian prøvde derfor såvidt å prøve å kompilere med avr-gcc istedet, men ble ikke ferdig med dette før dagen var slutt.