PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfänger: Programmierung 2 Eingänge schalten 2 Ausgänge



jungi
09.03.2012, 01:07
Hallo,

ich habe schon länger mit den Gedanken gespielt, mich mal ein bisschen mit Microcontrollern zu beschäftigen. Habe mir nun ein AVRISP mk 2 gekauft und noch ein Mini RGB Fader hier rumliegen (https://www.eiwomisa.de/website/shop-bausaetze/led-steuerung/mini-rgb-fader-v1x/anleitungen.html). Den wollte ich eigentlich für die ersten Versuche missbrauchen. Auf den Board ist ein Attiny 2313 drauf und ein paar Taster und 3 Leds. Der Microcontroller ist mit Bascom programmiert. Ich möchte aber erstmal mit Assembler anfagen, kann ich den einfach überspielen oder muss ich was beachten? Muss mir die Tage nochmal ein Adapter-Kabel bauen von 10 auf 6 Pol ISP.

Ich habe mal mein erstes Programm geschrieben und es simuliert. PB0,PB1 sollen Eingänge sein (Pull up Widerstände aktiviert). PB2,PB3 Ausgänge. Der PBO soll den PB2 schalten und der PB1,PB3 . Also ein ganz simples Prorgamm. Ich musste allerdings sehr viele Sprünge einbauen, um das zu realisieren. Das muss doch auch einfacher gehen oder? Hier mal das Programm.

.include "tn2313def.inc"
ldi r16, 0xFC
out DDRB, r16 ; PB0,PB1 Eingänge S3,S4 ; Rest Ausgänge


ldi r16, 0x3 ; Pullup-Widerstände aktivieren.
out PORTB, r16

loop: sbic PINB,0 ; Kontrolle, ob Eingang PBO geschaltet. Wenn Schalter betätigt dann 0V -> nächster Schritt wird übersprungen
jmp next
sbi PortB,2 ; blaue LED einschalten
jmp Ein2
next: cbi PortB,2 ; blaue LED ausschalten
Ein2: sbic PINB,1 ; Nächsten Eingang kontrollieren
rjmp Aus
sbi PortB,3 ; grüne LED einschalten
rjmp loop
Aus: cbi PortB,3 ; grüne LED ausschalten
rjmp loop

Bin für jeden Tipp dankbar.

Grüße Jungi

ePyx
09.03.2012, 06:05
Auf den Board ist ein Attiny 2313 drauf und ein paar Taster und 3 Leds. Der Microcontroller ist mit Bascom programmiert. Ich möchte aber erstmal mit Assembler anfagen, kann ich den einfach überspielen oder muss ich was beachten?

Brauchst nichts weiter beachten. Eventuell, wenn da vorher Firmware drauf ist, würde ich einen Dump (eine Kopie) des Speichers machen und mir die Fuse-Bits anschauen, notieren und ggf. für deine Anwendng anpassen. Das wäre aber nur um später den Originalstand wiederherstellen zu können. Wenn dir das Schnuppe ist, dann schmeiß das Hex-File drauf.

Was den Code angeht, zwei Tipps:


Benutze Code-Tags [CODE] und [ /CODE] (ohne Leerzeichen)
es empfiehlt sich eine Sprungmarke für den Resetzustand einzuführen und per .CSEG die Adressen mit entsprechenden Sprungmarken "anzuspringen"


Ansonsten sieht es auf den ersten Blick recht ok aus. (Sorry, hab erst eine halbe Tasse Kaffee intus und unter 2 geht gar nix :()
Aber wenn du es simuliert hast und das gut aussah, dann wird es schon schiefgehen.

Kampi
09.03.2012, 07:01
Womit Programmierst du in Assembler? Nimmst du dafür auch Bascom?
Wenn ja brauchst du dir um die Fuses keinen Kopf machen. Ansonsten wie oben schon gesagt erstmal auslesen und irgendwo notieren.
Programm sieht in Ordnung aus.
In Assembler musst du eh teilweise mit recht vielen Sprüngen arbeiten. Ich bin nun auch nicht so Assemblerfixiert, deswegen kann ich dir leider nicht sagen was du da noch optimieren kannst.
Aber sowas kommt mit der Zeit :)
Irgendwann hast du da einen Blick für.

ePyx
09.03.2012, 07:07
Wenn ja brauchst du dir um die Fuses keinen Kopf machen.

Ist Bascom nicht genauso abhängig, was den Takt bzw. den Vorteiler angeht ?

Kampi
09.03.2012, 07:21
Ist Bascom nicht genauso abhängig, was den Takt bzw. den Vorteiler angeht ?

Ja aber da kannst du die Fuses nicht unbeabsichtigt umstellen, weil du das ja quasi bei der Programmierung machst, bzw. machen kannst.
Wenn die schon richtig eingestellt sind kann er die Fusebits da ja getrost ignorieren.

oberallgeier
09.03.2012, 09:45
... Muss mir die Tage nochmal ein Adapter-Kabel bauen von 10 auf 6 Pol ISP ...Vielleicht so (klick hier) ? (https://www.roboternetz.de/community/threads/42906-ISP-Adapter-Kabel-10-auf-6-und-umgekehrt)

Nicht nur in Assembler habe ich so einen Ausdruck:
ldi r16, 0xFC

so geschrieben:
ldi r16, 0b11111100

und sinngemäß dann

ldi r16, 0x3
ldi r16, 0b00000011

Ich finde das klarer.

jungi
09.03.2012, 10:43
Ich programmiere mit AVR Studio. Werde die Tage dann mal alles anschließen und testen.
Bin gespannt.