Hallo Leute,
ich hätte gerne eine Frage und zwar da ich mich mit der
Assemblerprogrammierung nicht auskenne, wie ich den channel von einem
ADC eines Atmega's auswählen kann?
Ein Ausschnitt meines Programms:
1
ldi temp1, (1<<REFS0) ; Kanal 0, interne Referenzspannung 5V
Hier wird der Kanal 0 also PORTC0 ausgewählt vom ADC und die interne
Referenzspannung wird gewählt. Ich google die ganze Zeit und kämpf mich
durch die Tutorials durch aber ich finde einfach nicht raus, mit welchem
Befehl ich den Port1 zum Beispiel auswählen kann statt dem Port0.
Kann mir vielleicht da wer helfen. Wäre sehr dankbar.
@ Aladin Mujovic (djas020)
>durch die Tutorials durch aber ich finde einfach nicht raus, mit welchem>Befehl ich den Port1 zum Beispiel auswählen kann statt dem Port0.
Tja, wie wäre es mit einem Blick ins Datenblatt?
http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf
Seite 205
MFG
Falk
Aladin Mujovic wrote:
> Kann mir vielleicht da wer helfen. Wäre sehr dankbar.
Ganz einfach. Hol dir von Atmel das Datenblatt zu deinem
Controller und sieh im Kapitel über den ADC nach.
Abschnitt: Analog-to-Digital Converter
Unterkapitel: Changing Channel or Reference Selection
Dort findest du eine Tabelle in der die Belegung des ADMUX
Registers angegeben ist und aus der herauszulesen ist, welche
Bits gesetzt werden müssen, damit welcher Kanal aktiv wird.
Im übrigen findet sich selbige Tabelle auch im AVR-Tutorial
bei der Registerzusammenfassung wieder :-)
Soviel zum Thema: Ich habe das Tutorial studiert.
Aha, danke daweil für euere Meldungen. Ich hab jetzt die verschiedenen
Inputs gefunden und zwar:
Table 75. Input Channel Selections
MUX3..0 Single Ended Input
0000 ADC0
0001 ADC1
0010 ADC2
0011 ADC3
0100 ADC4
0101 ADC5
0110 ADC6
0111 ADC7
Wie schreibe ich das jetzt im Assembler?
ldi temp1, (1<<REFS0) | 0x0001 ; Kanal 0, interne
Referenzspannung 5V
out ADMUX, temp1
Verstehe ich das richtig so oder?
ich speichere solche Einstellungen die ich übergebe immer zusätzlich im
SRAM(auch um Register wieder anderweitig verwenden zu können). Und bevor
ich etwas ändere lese ich den alten Stand ein und ändere die
entsprechenden Bits, so kann ich im weiterem Programmablauf auch
verschiedene Zustände abfragen. Eine OR Verknüpfung ist natürlich auch
möglich. Habe noch nicht probiert ob man vielleicht auch direkt ADMUX
auslesen kann, dann würde sich das mit dem SRAm erübrigen.
.DSEG ;Reserve jeweils 1 Byte im SRAM
Status1: .byte 1
.CSEG
.org 0x000
jmp RESET ;Interuppt-Tabelle
.........
.........
ldi temp, 0b1110000 ;Auswahl Referenzquelle, ADLAR und Kanal 0
out ADMUX, temp
sts Status1, temp
...
...
lds temp, Status1
sbr temp, 1 ;Auswahl des 2ten Kanals (0-8 möglich)
out ADMUX, temp
sts Status1, temp
naja ich weiss nicht ob das die gescheiteste lösung ist, aber ich habe
in der mainschleife 3 verschiedene abfragungen ich habe auch eine
zwischenspeicherung von den daten bis ich sie an die schnittstelle
schicke, dann lösche ich sie und verwende die register für die nächste
messung, der vorgang wiederholt sich 3 mal. für mich reicht es. und
danke für eure hilfe, jetzt hab ich das programm komplett.
falls es wer braucht:
@ Thomas O. (kosmos)
>ich speichere solche Einstellungen die ich übergebe immer zusätzlich im>SRAM(auch um Register wieder anderweitig verwenden zu können).
Speicherplatzverschwendung! Ausserdem kann man sich da fix
Inkonsistenzen an den Hals holen (Register im SRAM ungleich realem
Steuerregister).
>ich etwas ändere lese ich den alten Stand ein und ändere die>entsprechenden Bits,
Das ist meist der bessere Weg, um in komplexen Programmen keine bösen
Seiteneffekte zu erzeugen.
>lds temp, Status1>sbr temp, 1 ;Auswahl des 2ten Kanals (0-8 möglich)>out ADMUX, temp
Das ist schlechter Stil, nicht nur wegen der Zwischenspeicherung im
SRAM. Besser so.
Aladin Mujovic wrote:
> danke für eure hilfe, jetzt hab ich das programm komplett.
Wow.
So einen ausgeprägten Fall von Copy&Paste Programmierung und
'ich weis nicht was ich tue' habe ich selten gesehen.
Da hast du dir ja eine Menge Arbeit gemacht, für eine
Änderung, die aus dem Originalprogramm, einer kleinen Umstellung
und vielleicht 8 bis 10 zusätzlichen Codezeilen besteht.
Die meisten hätten wenigstens die Initialisierung des Stackpointers
nur einmal am Programmanfang gemacht :-)
Schon mal was von Unterprogrammen gehört?
Edit: Die letzte Frage nehme ich zurück. Sogar die Transmit
Funktionen wurden dupliziert (tripliziert), was nicht gerade
für ein Verständnis dessen was man tut spricht.
sollte man sich allerdings auf der Zunge zergehen lassen.
Das sollte man sich einrahmen und an die Wand hängen.
So nach dem Motto: Dreifach hält besser :-)
@ Karl heinz Buchegger (kbuchegg)
>Edit: Die letzte Frage nehme ich zurück. Sogar die Transmit>Funktionen wurden dupliziert (tripliziert), was nicht gerade>für ein Verständnis dessen was man tut spricht.
Du kennst doch den James Dean Film "Denn sie wissen nicht . . .
;-)
Falk
hehe.. na gut. wenigstens gibt es leute die den ganzen tag was besseres
zu tun haben als den ganzen tag vor dem pc zu sitzen und für die
programmierung bzw. elektronik nicht das EINZIGE leben ist.
rechtschreibfehler enthalten, sonst kommen euch deswegen auch noch die
tränen. schönen tag noch.
Aladin Mujovic wrote:
> hehe.. na gut. wenigstens gibt es leute die den ganzen tag was besseres> zu tun haben als den ganzen tag vor dem pc zu sitzen und für die> programmierung bzw. elektronik nicht das EINZIGE leben ist.
Natürlich gibt es die.
Aber diese Leute können dir nicht weiterhelfen, wenn du ein
Problem in der Programmierung hast.
Es gibt auch eine ganze Menge Leute die nicht den ganzen Tag
in der KFZ-Werkstatt stehen und die trotzdem nicht einen Vergaser
reparieren indem sie mit dem Hammer draufdreschen.
@ Aladin Mujovic (djas020)
>hehe.. na gut. wenigstens gibt es leute die den ganzen tag was besseres>zu tun haben als den ganzen tag vor dem pc zu sitzen und für die>programmierung bzw. elektronik nicht das EINZIGE leben ist.>rechtschreibfehler enthalten, sonst kommen euch deswegen auch noch die>tränen. schönen tag noch.
Und das ist mal wieder ein Musterbeispiel für Arroganz der neuen Zeit.
Kaum hat man geholfen, verlieren sie die Bodenhaftung.
Möge dich der Blitz beim Scheissen treffen!
Der Admin sollte deinen Account sperren (jaja, kann man ja billig nen
neuen anlegen).
Schönen Tag noch
Falk