PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Erste Gehversuche mit Assembler



rogerberglen
02.08.2007, 22:10
Ich bin Neuling auf dem Gebiet der Assemblerprogrammierung. Ich habe schon zwar einiges in Assembler mit dem 8085 Prozessor angestellt, aber mit den Atmels fange ich wieder von Vorne an.
Ich möchte mit einem ATtiny15 eine Analoge Spannung an ADC1 messen und mit 3 Led's ausgeben, ob die Spannung zu niedrig ist, passt, oder zu hoch ist.
Ich habe mit AVR Studio schon ein paar Zeilen geschrieben, habe auch das entsprechende Include File eingebunden. Avr Studio nimmt aber nicht die vordefinierten Registernamen!! Es kommt immer "Invalid Register" egal was man für ein Register nimmt!
AVR Studio meldet aber, daß die entsprechende Include Datei geladen worden ist.
Und hat Jemand mal einen Beispielcode wie man eine Analoge Spannung misst und mit LED's auswertet??
Ich weis mir da noch nicht richtig zu helfen.

izaseba
02.08.2007, 22:37
Hallo rogerberglen,

Willkommen in der Assemblerwelt :-)
Welche Register ergeben diesen Fehler ? Die Universal Register R0-R31
?

Hmm, komisches Problem, kenne ich noch nicht, hast Du Dich vielleicht bei der tn15def.inc vertippt ?

Zu Sache ADC einlesen,
ich habe vor ein paar Jahren einen Thermometer gebaut, der mit 2 LEDs die Temperatur anzeigt.
Einfache Sache, 2 LEDs rot u. Grün. ist die Ist Temperatur weit unter Soll (5 Grad drunter) blinkt die rote Led ist sie ziemlich nah an soll leuchtet sie dauernd, ist = soll Leuchten beide und genauso für übertemperatur mit der anderen led.
Das ganze läuft seitdem mit einer Knopfzelle und befindet sich im Powerdowm Modus, wenn es nicht gebraucht wird.
Ich poste Dir mal das PRogramm, vielleicht kannst Du Dir mal was abgucken ;-)

Gruß Sebastian

rogerberglen
02.08.2007, 23:09
Bin schon ganz gespannt auf das Beispielprogramm. Ich habe keinen Tippfehler in der Include Datei. AVR Studio sagt ja auch, daß die at15def.inc geladen wurde. Ich will dan eigentlich nur mit dem Befehl LDI ADMUX,$01 eine 1 in das Register schreiben. AVR sagt dann lapidar "Invalid Register".

izaseba
02.08.2007, 23:15
Ich will dan eigentlich nur mit dem Befehl LDI ADMUX,$01 eine 1 in das Register schreiben. AVR sagt dann lapidar "Invalid Register".

Und hier ist der Fehler,
Es geht so nicht!
Du mußt schon den Umweg über einen Universallregister > 15 machen z.B.
ldi r16,0x01
out ADMUX,r16

Schau Dir meinen Thermometer an, dann wir einiges klarer (oder auch nicht)
Es ist zwar etwas "groß" für den Anfang, demonstriert Dir aber so ziemlich viele Sachen
-Interrupts
-Timer
-ADC
-EEPROM Zugriff
-Sleepmodus
- ? sonst noch was ;-)

Gruß Sebastian

rogerberglen
02.08.2007, 23:47
Guter Tipp! So funktionierts. Dann kann ich mich ja ins Vergnügen stürzen. Ich nehme dann Dein Programm mal als Arbeitsgrundlage um die ganze Sache näher kennenzulernen.

izaseba
02.08.2007, 23:53
Super !
Vielleicht kannst Du auf meiner HP noch was brauchen, ein klick auf www genügt ;-)

Gruß Sebastian

rogerberglen
03.08.2007, 14:43
Ich habe einfach mal das Programm so in AVR Studio eingetippt. Es werden aber beim Kompilieren Fehler angezeigt. Ich sehe nur keinen logischen Sinn dahinter.
Lief das Programm genau in der Form??? Bei mir kommen zahlreiche Fehler wenn ich versuche das Programm zu kompilieren.

1. .def 5Sekunden = R24
Fehler: Analog1.asm(43): error: syntax error, unexpected INTEGER, expecting SYMBOL or FUNCTION or REGDEF.

2. .org TOV0addr
Fehler: Analog.asm(76): error: Use of undefined or forward referenced symbol 'TOV0addr' in .org

3. .org ADCaddr
Fehler: Analog1.asm(78): error: Use of undefined or forward referenced symbol 'ADCaddr' in .org

Ich denke, daß AVR Studio noch weitere Fehler meldet wenn man diese bisher angezeigten behebt.
Ich wäre da sehr dankbar das Programm mal zum Laufen zu bringen damit ich die Arbeitsweise der ADC Wandlung nachvollziehen kann.

izaseba
03.08.2007, 17:30
hallo rogerberglen,
Das Programm habe ich direkt aus dem Arbeitsverzeichnis kopiert, wo auch direkt die *hex mit drin war.

Allerdings assembliere ich mit avra, da ich unter Linux arbeite.

Avra soll aber kompatibel zu avr assembler sein.
Ich habe da aber eine Idee.
Irgendwo muß bei avrstudio eine option "Assembler options" sein.
Stell da mal vom "Assembler 2" auf "assembler 1" um.
Wenn da immer noch Fehler kommen melde Dich nochmal, es ist eine Kleinigkeit.
Gruß Sebastian

izaseba
03.08.2007, 18:20
Ich habe oben eine geänderte Version gepostet^

rogerberglen
03.08.2007, 18:30
Ich konnte die geänderte Version fehlerlos kompilieren! Ich habe in den Optionen auch Version1 des Kompilers umgestellt.
Jetzt bräuchte ich nur noch eine Lösung wie man den im AVR Studio analoge Eingangsspannungen simulieren kann um die Funktion des ADC zu prüfen.

izaseba
03.08.2007, 19:20
Ich konnte die geänderte Version fehlerlos kompilieren!
Das freut mich, avra hat wohl die "5" an Anfang akzeptiert, AVRStudio dagegen nicht, wenn ich näher drüber nachdenke hat AVRStudio eigentlich recht...

ADC simulieren ? geht das überhaupt ?
Meine Idee dazu, im ADC Interrupt einen Break am Anfang setzen, und in ADCL und ADCH den Wert eingeben.
Wenn Du nicht über 10 Bit kommst müßte das funktionieren...
Ich weiß auch nicht, was der Simulator aus dem EEPROM ausließt ?
Die zwei Werte, die in .eseg stehen habe ich mit einer Messreihe für 50 Grad ermittelt.
Das ganze ist auch ziemlich genau, ich hatte bedenken wegen NTC und der geringen Widerstandsänderung pro Grad.
Meine Frau setzt diesen Thermometer erfolgreich seit 2 Jahren ein ;-)

Gruß Sebastian

wkrug
04.08.2007, 18:56
Ich weiß auch nicht, was der Simulator aus dem EEPROM ausließt ?
Im AVR Studio kannst Du mit View - Memory auch den Inhalt des virtuellen EEPROMS auslesen.
Du kannst die gespeicherten Werte auch Editieren und mit UP/Download Memory als .eep Datei abspeichern / laden.
Die Werte die sich im EEPROM befinden werden halt dann auch vom Simulator ausgelesen.

oberallgeier
11.09.2007, 22:49
Hi, izaseba,

das ist ja ein schickes Temperaturprojekt von dem Du schreibst. Das sollte doch auch auf dem ATtiny13 gehen. Ich studiere grad "meine" Fehlermeldungen zum tiny13 im AVRStudio .... :-k

Würdest Du mir bitte noch Tipps geben zu den Sensoren und evtl. den Schaltplan dazulegen [-o< ok, ok, klingt nach sehr viel eigener Faulheit. Aber der nächste Winter kommt ja grad,

danke im Voraus sagt der Joe
DerAltevomBerg

izaseba
11.09.2007, 23:58
Hallo oberallgeier,
Schön, daß Dir das Projekt gefällt...
Welche Fehlermeldung gibt es denn ?
Irgendein Register heißt bei T13 anders, weiß aber im Moment nicht welcher, irgendwas mit Timer ?
Tips zu Sensoren ?
Naja, der NTC wurde irgendwo geschlachtet, ich hatte kein Dattenblatt, keine Kennlinie nichts.
Habe aber selber eine Kennlinie aufgenommen, mit Ohmmeter, Wassertöpfchen, Termometer und Blatt Papier ;-)
Daraus haben sich die Werte ergeben, naja, das Ding ist eher ein Schätzeisen, aber für die Aufgabe, die mir von meiner Frau gestellt wurde perfekt, sie war:
-klein
-einfach zu bedienen
-Kein Display
-Aus größerer Entfernung erkennbar(damit konnte sie Ihr Wasserdampfbad auf dem Herd im Blick behalten und gleichzeitig im Net Surfen, Weiber halt)
-Batteriebetrieben
-Die Solltemperatur sollte einfach einstellbar sein


Naja, ich kann Dir den Schaltplan Posten,kein Problem aber nicht jetzt, ich muß in meinem "Archiv" suchen ;-)

Gruß Sebastian

oberallgeier
12.09.2007, 08:48
Hallo izaseba,

whow - das ist genau die Art DESIGN die ich liebe - hochtechnisch, aber so handlich, dass man keinen promovierten Dienstmann braucht. Herrlich!

Mal ganz hemdsärmlig (auf die Schnelle halt - mit kopieren und einfügen) die Fehlermeldungen:

AVRASM: AVR macro assembler 2.1.2 (build 99 Nov 4 2005 09:35:05)
Copyright (C) 1995-2005 ATMEL Corporation

D:\pro-fils_D\computer+mcontroller\LPmikro\test\test.asm( 11): Including file 'C:\Programme\Atmel\AVR Tools\AvrAssembler2\Appnotes\tn15def.inc'
D:\pro-fils_D\computer+mcontroller\LPmikro\test\test.asm( 70): error: Use of undefined or forward referenced symbol 'T0OVaddr' in .org
D:\pro-fils_D\computer+mcontroller\LPmikro\test\test.asm( 71): error: Overlap in .cseg: addr=0x0 conflicts with 0x0:0x1
D:\pro-fils_D\computer+mcontroller\LPmikro\test\test.asm( 72): error: Use of undefined or forward referenced symbol 'ADCaddr' in .org
D:\pro-fils_D\computer+mcontroller\LPmikro\test\test.asm( 73): error: Overlap in .cseg: addr=0x0 conflicts with 0x0:0x1
D:\pro-fils_D\computer+mcontroller\LPmikro\test\test.asm( 78): error: Overlap in .cseg: addr=0x1 conflicts with 0x1:0x2

Assembly failed, 5 errors, 0 warnings

1tes hihihi: der Smiley ist eine Acht mit Klammer: 8 ), der ganze Test also gesperrt : t e s t . a s m ( 7 8 ) >> Fehler in line 78.

Schon mal jetzt herzlichen Dank.

Noch ´n hihihi - ich muss jetzt auch weg - montieren gehen - auf den Berg, Drachen aufmontieren und runterfliegen.

Ciao sagt der Joe
DerAltevomBerg

izaseba
12.09.2007, 21:59
Hallo oberallgeier,
Schlechte Nachrichten :-(
Schaltplan gibt es nicht mehr, leider...
Archiv ist abgebrannt ;-)

Reichen Dir die Angaben vom Quelltext nicht?


;; Thermometer
;; Pinbelegung :
; PB0 LED Gelb
; PB1 LED Rot
; PB2 Taster
; PB3 Eingang Spannungsteiler
; PB4 Spannungsteiler Einschaltpin
Die LEDs sind über Widerstand an VCC geschaltet,
Der Taster schaltet GND,
Der NTC bildet mit einem 2k2 Widerstand einen Spannungsteiler, wobei der NTC am GND hängt, und der Widerstand an PB4.
PB3 ist der ADC Eingang, der an den Spannungsteiler geht.
Noch reset über 10k an Vcc,VCC an +,GND an minus fertig ist die Schaltung ;-)

Was Du nur Prüfen mußt,
ob bei Tiny13 PB3 ADC Eingang ist und zwar ADC2
ob bei T13 PB2 ein Interruptfähiger Eingang ist und zwar INT0

Wenn ja, kannst Du alles so übernehmen, wenn nein müssen ein paar Kleinigkeiten geändert werden...

Gruß Sebastian

P.S.
Schalte im AVR Studio Assembler2 in Assembler 1 um, dann sollten die Fehler verschwinden...

oberallgeier
12.09.2007, 23:26
Hallo izaseba,

ach - schon gut. Danke auf alle Fälle für die Mühe. Wenns reichen muss, dann muss es eben. Ich werd versuchen, das Ganze in den nächsten Tagen nachzuempfinden (längere Reise, meist dienstlich, und abends hab ich auch vielleicht mal wenig zu tun).

Ich melde mich in ein, zwei Wochen wieder. Hoffentlich mit positiven Dingen.

Ciao, Joe
DerAltevomBerg