Hallo,
ich arbeite derzeit mit einem uC... es ist ein ATmega128.
Arbeiten heißt, dass ich die Hardware für einen Kumpel baue/vorbereite,
aber leider keinen blassen Schimmer habe, wie ich testen soll, ob meine
Hardware auch funktioniert. Mein Kumpel ist auch gerade im Urlaub und
nach seiner Rückkehr wollte er eigentlich loslegen. Da ich aber ungern
in Griechenland anrufen will um das zu klären, frage ich hier nach.
Ich kann den Controller ansprechen (connect via AVR Studio, mkII und
ISP) und habe auch schon den externen 10MHz Kristall via Fuses aktiviert
und er schwingt auch.
Nun will ich ein kleines simples Programm testen.
Da ich mich mit Programmierung noch nie groß auseinandergesetzt habe
(nur die Grundlagen im Studium), habe ich an vier LEDs und einen 4fach
Dipschalter gedacht.
Nun möchte ich einfach mit jedem Dip eine LED aus- oder anmachen... mehr
nicht.
Die LEDs hängen an PD4/5/6/7 und die Dipschalter hängen an PD0/1/2/3.
Schaltplan siehe Bild im Anhang.
Wie kann ich ein solches Programm umsetzen?
Ich hab kurz das Tut überflogen, aber das ist mir schon wieder alles zu
theoretisch. Hätte mir es irgendwie einfacher vorgestellt, als ich
gesagt habe, dass ich eine funktionsfähige Platine versprochen habe. Die
Wette möchte ich auch nur ungern verlieren :)
Wäre für Hinweise und Hilfe sehr sehr dankbar!
MfG
PS: Ich habe das Bsp im Tut gelesen
1
.include "m8def.inc"
2
3
ldi r16, 0xFF
4
out DDRB, r16 ; Alle Pins am Port B durch Ausgabe von 0xFF ins
5
; Richtungsregister DDRB als Ausgang konfigurieren
6
ldi r16, 0x00
7
out DDRD, r16 ; Alle Pins am Port D durch Ausgabe von 0x00 ins
8
; Richtungsregister DDRD als Eingang konfigurieren
9
loop:
10
in r16, PIND ; an Port D anliegende Werte (Taster) nach r16 einlesen
11
out PORTB, r16 ; Inhalt von r16 an Port B ausgeben
12
rjmp loop ; Sprung zu "loop:" -> Endlosschleife
Hier werden komplette Porst definiert, aber wie kann ich die einzelnen
Ein-/Ausgände des POrtD ansprechen bzw. festlegen?
Ausgänge => PD4, PD5, PD6, PD7
EIngänge => PD0, PD1, PD2, PD3
Hat es einen bestimmten Grund, warum du dir das Assembler-Tut angeschaut
hast?
Ich empfehl dir das C-Tut anzuschauen. Ist wahrscheinlich einfacher.
Vermutlich hast du im Studium auch eher eine Hochsprache verwendet?!
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
Ich habe auch Assembler programmiert im Studium... finde ich irgendwie
übersichtlicher und einfacher. Wiel alles Schritt für Schritt
abgearbeitet wird.... das C Tut finde ich schon wieder zu komplex. Da
gehts dann los mit Prozessortyp und include dies und jenes... da komm
ich nicht mit.
Gibt es vielleicht ein Bps, was die gewünschte Aufgabe erfüllt und ich
es nur auf meinen Controller anpassen muss?
Wie gesagt, ich will mich nicht weitgehend damit auseinander setzen...
ich brauch es nur für Testzwecke.
out DDRD, r16 ; Pins 4-7 am Port D als Ausgang konfigurieren
5
; Pins 0-3 am Port D als Eingang konfigurieren
6
7
loop:
8
in r16, PIND ; an Port D anliegende Werte (Taster) nach r16 einlesen
9
swap r16 ; in r16 bits 0-3 mit bits 4-7 vertauschen
10
andi r16, 0xF0 ; nicht benötigte bits 0-3 löschen
11
out PORTD, r16 ; Inhalt von r16 an Port D ausgeben
12
rjmp loop ; Sprung zu "loop:" -> Endlosschleife
Das könnte funktionieren. Ist aber ungetestet, da ich sowas auch eher in
C machen würde anstatt in Assembler. Es wird vorrausgesetzt, das die
LEDs an GND verschaltet sind. Ausgabe ist sonst invertiert.