Miniräknare på AVR

Berätta om dina pågående projekt.
Användarvisningsbild
GuruX
Inlägg: 257
Blev medlem: 26 maj 2003, 21:52:15
Ort: Göteborg

Miniräknare på AVR

Inlägg av GuruX »

Ja, så har man nu hamnat på universitet.
Läser grundläggande mikrodatorteknik 1 på Göteborgs Universitet.

Som slutuppgift ska vi skriva en miniräknare som kommunicerar med datorn via comporten. HyperTerminal används för att skicka och ta emot.

Problemet för mig är att jag har ingen som helst aning om hur jag ska skriva själva miniräknaren. Jag har inga direkta programmeringserfarenheter sent tidigare, och skulle därför behöva lite hjälp. Nej, det här är inte fusk, våran lärare uppmuntrar oss att söka information själva osv. Han säger att kopiera med ctrl-c och ctrl-v är ingen bra idé, då lär man sig inte, men att däremot skriva av kod är helt ok. Då passerar den hjärnan ordentligt och man minns förhoppningsvis en del iaf.

Hursomhelst, har någon lite erfarenhet inom AVR och detta? Vad jag har förstått så är det bästa att skriva subrutiner för addition, subtraktion, multiplikation och division, för att sedan anropa dem från huvudprogrammet.
Rymdninja
Inlägg: 330
Blev medlem: 15 december 2003, 13:41:25
Ort: Göteborg

Inlägg av Rymdninja »

sweet..jag läser också den kursen om än lite av o till :)

hur som helst...det enda som egentligen är problem är väl multiplikation och division efters om det inte finns färdiga operationer för det. Lite pill blir det väl med de andra också om de skall klara av mer än ensiffriga tal...
jag kommer inte ihåg detaljerna och är för lat för att plcoka fram kurs-cdn ;)

Men din ide är juh bra. Ha ett huvudprogram som läser tecknena, separerar vid +.-.* eller / och anropar rätt metod. Sedan sickas svaret tillbaks till datorn....

EDIT: har t.o.m. för mig att mattemetoderna finns i kurskompendiet (på cdn)... :roll:

piece of cake ;)
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

Hehe, jag är också registrerad på den kursen... både del 1 och del 2. jag tänkte att det var 10 lätta poäng :) Dock har jag inte orkat sätta mig ner och göra klart uppgiften än... när jag skulle börja göra mätstationen blev det en lcd-chatt istället (http://lcd.altronix.se), så bra diciplin har jag :oops:

På kurs-CD:n finns massor av exempelkod. Har du fixat seriekommunikationen ? Steget därefter borde vara att spara siffrorna man tar emot och omvandla till heltal från ascii antar jag. Sedan spara +, - eller * och därefter det andra talet för att slutligen anropa en subrutin som räknar ut svaret när man trycker på enter till exempel...

Hur långt har du kommit ?

Det enda jag tycker är jobbigt är att man måste skriva i assembler, det är mycket smidigare med c tycker jag...

/Johan
Rymdninja
Inlägg: 330
Blev medlem: 15 december 2003, 13:41:25
Ort: Göteborg

Inlägg av Rymdninja »

På kapitlet serieporten är det en mini-miniräknare man kan göra...bara + (men man kan juh enkelt lägga till minus)....har du gjort delkapitlena?

Om man vill vara extra ful så kan man juh alltid låte sin c-komilator generare asm-kod från c program.....dockj tror jag läraren undrar vad mn tänker med när man döper sina rutiner till l1 och ltmp2 osv :twisted:

Men det är nog bara en tröskel...
Vet du förresten om man måste göra delkapitlen eller om man kan göra den "stora" upggiften direkt?
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

Det räcker med den stora uppgiften, det andra ska egentligen inte redovisas även om man gärna får ta med det i rapporten...

Jag har också funderat över att låta c-kompilatorn göra asm-kod åt mig och sen snygga till den lite med kommentarer och andra namn ;)

/Johan
Användarvisningsbild
PaNiC
Inlägg: 2565
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

Kod: Markera allt

;*****************************************************************************          
;'hextoasc'
;Aim
;       Convert hex to ASCII. Hex value is passed from & ASCII value is passed
;       back to calling function in register treg.
;Registers used
;       rtemp   temporary register
;       treg    register containing data
;Functions called
;       none
;*****************************************************************************

hextoasc: andi treg,$0f
          cpi treg,$0a
          brsh henxt1
          ldi rtemp,$30
          rjmp henxt2
henxt1:   ldi rtemp,$37       
henxt2:   add treg,rtemp
          ret

Kod: Markera allt

;*****************************************************************************
;'asctohex'
;Aim
;       Convert ASCII to hex. ASCII value to be converted is passed from & hex
;       value is passed back to calling function in register rreg.
;Registers used
;       rreg    register containing data
;Functions called
;       none
;*****************************************************************************

asctohex: cpi rreg,$40
          brsh asnxt
          subi rreg,$30
          rjmp asnxt1
asnxt:    subi rreg,$37
asnxt1:   ret
Enjoy.. Kan kanske hjälpa något.
Rymdninja
Inlägg: 330
Blev medlem: 15 december 2003, 13:41:25
Ort: Göteborg

Inlägg av Rymdninja »

strombom skrev:Det räcker med den stora uppgiften, det andra ska egentligen inte redovisas även om man gärna får ta med det i rapporten...
/Johan

Ojoj....då har jag jobbat i onödan ;)
henkebenke
Inlägg: 515
Blev medlem: 31 maj 2003, 10:42:37
Ort: Helsingborg

Inlägg av henkebenke »

Ett tips är att kolla Atmels appnotes. Där finns en hel del rutiner färdiga, bland annat division och multiplikation.
Användarvisningsbild
GuruX
Inlägg: 257
Blev medlem: 26 maj 2003, 21:52:15
Ort: Göteborg

Inlägg av GuruX »

Har hamnat lite efter och sitter och grejar med kapitlena fortfarande. Ska precis komma till serieporten.
Det är ju bara det att kompendiet ska skrivas också...
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

Ja det är ju rapporten som är det jobbiga

ska ni dit imorgon ?

/Johan
Användarvisningsbild
GuruX
Inlägg: 257
Blev medlem: 26 maj 2003, 21:52:15
Ort: Göteborg

Inlägg av GuruX »

Ja, jag ska dit.
Kunde inte vara där på alla helgona, då var jag hemma i Örebro. Så när man kom förra veckan var det inget. Roligt att inte bli informerad att det var direkt veckan efter igen.

Vi verkar ju vara ett par st som är där. Roligt, då kan vi ju få lite utbyte av varandra. Jag postar en bild på mig själv här så känner vi kanske igen varandra sen.
Bild
Rymdninja
Inlägg: 330
Blev medlem: 15 december 2003, 13:41:25
Ort: Göteborg

Inlägg av Rymdninja »

jag ska nog inte dit imorrn :/
Det får blir när jag har gjort lite mer så jag kan redovisa nåt. Sitter gärna hemma i labbar dessutom så har jag ett exjobb att göra också....
Men men...det kommer fler chanser :)
frejo
Inlägg: 496
Blev medlem: 21 april 2004, 21:43:01
Ort: Linköping

Inlägg av frejo »

ATMega serien har va jag vet inbyggd instruktion för multiplikation, utförs på två klockcykler om jag minns rätt...
Användarvisningsbild
GuruX
Inlägg: 257
Blev medlem: 26 maj 2003, 21:52:15
Ort: Göteborg

Inlägg av GuruX »

Jo, det stämmer. Men kursen ska göras på en 2313 som inte har det.

henkebenke: tack för tipset. om någon mera letar finns det här.
http://www.atmel.com/dyn/resources/prod ... OC0936.PDF
http://www.atmel.com/dyn/resources/prod ... AVR200.zip
Rymdninja
Inlägg: 330
Blev medlem: 15 december 2003, 13:41:25
Ort: Göteborg

Inlägg av Rymdninja »

Nån som har gjort klart den eller?
Mitt problem är att konvertera texsträngen med talet till ett binärt tal i avr:en....funderar på att göra en fuling och låta en kompilator göra det åt mig..men så svårt kan det juh inte vara...några tips?
Skriv svar