Hallo zusammen, ich habe ein Pollin Eva.-Board V2.0.1 mit einem Atmega32 und über den JTAG Anschluss einen AVR Dragon angeschlossen. Als Software benutze ich AVR Studio. Da ich in Assembler-Programmierung gerade erst einsteige, habe ich einige Startschwierigkeiten. Ich habe zwar geschafft die beiden LEDs des Pollin-Boards mit Hilfe des Tutorials zum laufen zu bringen, aber ich bekomme es nicht hier über den Assembler-Code einzelne Ausgänge, und somit einzelne LEDs zum leuchten zu bringen, bzw. einen der drei Taster einzulesen. Mir fehlt einfach der korrekte Quelltext wo Port D Pin 19 meine LED einschaltet. Ich finde nur Infos, wo alle Pin's von einem Port als Eingang oder Ausgang konfiguriert werden. In C ist das keine große Sache, da findet man auch einige Informationen im Netz. Ich hoffe, mir kann geholfen werden. Gruß, Marcel
Zum Port einlesen nimmt man PINx(Port INput x) Register. Auch nicht vergessen, die Datenrichtung mit DDRx(Data Direction Register x) einzustellen. x steht hier für einen Portnamen. Zum Ausgeben dann PORTx. Aufgepasst: die Neueren Megas toggeln die ensprechenden Bits des PORTx, wenn man in PINx schreibt. Beim Mega32 m.W. aber nicht der Fall. m32.inc oder wie sie auch immer heißen mag eingebunden? mfg mf PS: Pin 19 ist PD5? dann schreibst du (1 << PD5). oder mit der B00101101- bzw. 0b00101010-Schreibweise, falls dein ASM das frisst. In DDR ein Bit auf "1" heißt Ausgang. Portausgaben gehen mit OUT. Die Konstante musst du erst mit LDI ausm Flash in dein Lieblings-Arbeitsregister laden. Siehe auch: http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen
Guten Morgen, vielen Dank schonmal für die Antwort. Ich habe mich an diesem Code orientiert
1 | .include "m8def.inc" ; Definitionsdatei für den Prozessortyp einbinden |
2 | |
3 | ldi r16, 0xFF ; lade Arbeitsregister r16 mit der Konstanten |
4 | out DDRB, r16 ; Inhalt von r16 ins IO-Register DDRB ausgeben |
5 | |
6 | ldi r16, 0b11111100 ; 0b11111100 in r16 laden |
7 | out PORTB, r16 ; r16 ins IO-Register PORTB ausgeben |
8 | |
9 | ende: rjmp ende ; Sprung zur Marke "ende" -> Endlosschleife |
Wenn ich das richtig verstehe, sind in diesem Progrämmchen ja alle Ports von B als Ausgang geschaltet. Beim Pollinboard sind aber nur zwei Ausgänge von D als Ausgang und 3 als Eingang von D. Eben die LEDs und Taster. Wenn ich das Programm nun laufen lasse leuchten ja folglich beide LEDs weil es alles Ausgänge sind, wenn ich das richtig verstehe. Wie müsste ich denn jetzt diesen Quelltext ändern wenn ich an Port D einen Taster und eine LED angeschlossen habe? Achja, die m32~~ hab ich eingebunden.
servus wenn du mit dem taster 1 der an pd 2 angeschlossen ist die led 1 pd5 leuchten lassen willst wenn der taster gedrück ist sieht das prog z.b. so aus. .include "m32def.inc" ; Definitionsdatei für den Prozessortyp einbinden ldi r16, 0b11110000 ; bit 0-3 als Ausgang, bit 4-7 als Eingang out DDRB, r16 ; Inhalt von r16 ins IO-Register DDRB ausgeben ende: ;Sprungmarke hier beginnt das prog zu wiederholen sbis pinD, 2 ;überspringt den nächsten befehl wenn bit high sbi portD, 5 ;schalted die led ein rjmp ende ; Sprung zur Marke "ende" -> Endlosschleife so ich hoffe ich habs gut auskommentiert bin mir aber nicht sicher ob die inc datei so heißt frisch aus dem tutorial zitiert: Man muss nicht immer ein ganzes Register auf einmal einlesen oder mit einem neuen Wert laden. Es gibt auch Befehle, mit denen man einzelne Bits abfragen und ändern kann: Der Befehl sbic ("skip if bit cleared") überspringt den darauffolgenden Befehl, wenn das angegebene Bit 0 (low) ist. sbis ("skip if bit set") bewirkt das Gleiche, wenn das Bit 1 (high) ist. Mit cbi ("clear bit") wird das angegebene Bit auf 0 gesetzt. sbi ("set bit") bewirkt das Gegenteil.
ldi r16, 0b11110000 ; bit 0-3 als Ausgang, bit 4-7 als Eingang Ich glaub, die Zeile hat mir (gedanklich) gefehlt. Probier es zu Hause mal aus, sitz grad in der Vorlesung. Danke schonmal. Gruß, Marcel
Hi
>ldi r16, 0b11110000 ; bit 0-3 als Ausgang, bit 4-7 als Eingang
Entweder ist 'ldi r16, 0b11110000' oder der Kommentar falsch.
MfG Spess
der kometar ist falsch herum muss nartürlich heißen ldi r16, 0b11110000 ; bit 0-3 als Eingang, bit 4-7 als Ausgang
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.