Hi!
Ich habe seit kurzem ein STK500 und will mit dem ATmega8515 einen
12V-Motor ansteuern.
Die Hardware stimmt soweit, von einem PIN des Boards geht es auf einen
Optokoppler (und wieder zurück auf GND), der Optokoppler gibt das ganze
an einen Leistungstransistor weiter, der letzten Endes den Motor
bestromt.
Bisher bediene ich mich eines kleinen Tricks: Ich habe das
vorinstallierte Beispiel-Programm auf dem STK500 so umgeschrieben, dass
nurnoch der Zähler funktioniert. Nun schließe ich entsprechend den PIN
an den Optokoppler an, der 2^0 repräsentiert. Folglich läuft der Motor
bei allen ungeraden Zahlen, bei den geraden Zahlen steht er.
(Funktioniert so auch wirklich!)
Ich würde das ganze jetzt gerne mit einem "richtigen" Programm
realisieren, nur leider weis ich nicht sorecht wo ich anfangen soll -
trotz Einlesen in mehrere Tutorials. An und für sich dürfte das Programm
ja nur so 10 Zeilen Code haben. Im Wortlaut ungefähr so:
Wenn Switch0 betätigt wird, lege HIGH auf PB00 (Pin0 PortB). Wird
Switch1 betätigt, lege LOW auf PB00. Die Switches liegen z.B. auf PortD
und geben laut Datasheet eine 1 aus (sind also "Öffner"). Folglich: Wenn
PD00 (Pin 0 Port D) == 0, lege HIGH auf PB00, usw. Das sind allerdings
Taster, also nicht direkt "lege HIGH sobald PD00 == 0", sondern das
ganze über Zwischenspeicher lösen, damit man nicht den Knopf gedrückt
halten muss, um den Motor anzusteuern.
So, soweit gehen meine Gedanken bisher, eventuell könnte sie ja jemand
etwas ausarbeiten und mir die für das Programm nötigen Befehle
schmücken. Eine Erklärung, dass ich das alles auch noch verstehe, wäre
spitze! Komm nicht sorecht weiter ...
Vielen Dank schonmal.
Schaut mir nach einem Fall für das
AVR-Tutorial
aus.
In aller Kürze: Was du vor hast, sieht zwar einfach aus, ist es aber
nicht. Tastenentprellung ist schon etwas komplexer und kommt im Tut erst
relativ spät vor.
Wenn ich mir deine Ausdrucksweise allerdings so ansehe, solltest du das
Tut aber eher von vorne weg durchmachen.
@Alecsx
Leistungstransistoren sind keine Energiequellen, ergo können sie keinen
Motor bestromen, und genau hier fängt dein Problem an.
Du hast Null Ahnung.
@Jan Steiner:
Klar, das dass ein Leistungstransistor keine Energiequelle ist, der
Motor wird zwischen + und Kollektor reingeschalten, die Basis vom
Leistungstransistor liegt am Optokoppler. Wie schon gesagt: Die Hardware
passt soweit, der Motor läuft ja schließlich mit dem Beispielprogramm.
Und wenn ich mir das Beispielprogramm so ansehe:
1
[...]
2
.def Temp =r16 ; Temporary register
3
[...]
4
sbis PIND,0x00 ; If (Port D, pin0 == 0)
5
inc Temp ; then count LEDS one down
6
sbis PIND,0x01 ; If (Port D, pin1 == 0)
7
inc Temp ; then count LEDS one up
8
[...]
müsste ich den Befehl doch eigentlich nur so anpassen, dass anstelle von
"then count LEDs one up" mein einzelner pin auf high gesetzt wird. Wäre
das nicht über eine Konstante denkbar? Eben 1 und 0. Also anstelle von
inc eine Konstante einlesen, und mit dem andern Switch (Port D, pin 1)
die Konstante durch eine andere (-> 0) ersetzen.
So nach dem Motto:
1
[...]
2
;Code-Ausschnitt!
3
sbis PIN,0x00
4
LDI Temp, 1
5
sbis PIN,0x01
6
LDI Temp, 0
7
[...]
Najo auf jeden Fall danke schonmal für alle hilfreichen Antworten!