Wo soll die eingabe erfolgen?? Welche PIN? PINB, PINC oder PIND?? Und welches bit soll angesprochen werden?
mfg
Mike
atmega8 habe ich
Wo soll die eingabe erfolgen?? Welche PIN? PINB, PINC oder PIND?? Und welches bit soll angesprochen werden?
mfg
Mike
ach ja noch was! Mach es in Assembler! ist leichter!
Wenn du es in assembler machen willst kann ich dir vielleicht helfen, weil ich sowiso öfters mit assembler arbeite!
MFG
Mike
klar habe ich verstanden^^.Zitat von BiGF00T
Hmm... Ob jemand gleich in Assembler loslegen will, der grad in Basic rummacht... Wobei es auch wirklich ned sooo schwer is. Wenn ich es testen könnte, würde ich schnell was zusammenschrauben aber ich habe weder Bascom, noch habe ich seit qbasic-Zeiten irgendwas in der Art gemacht...Zitat von Exodus
Glaube aber trotzdem, dass basic oder C am Anfang zumindest viel übersichtlicher und einfacher zu verstehen sind. Nachdem man das Prinzip in einer der Sprachen dann verstanden hat, kann man es meist eh in allen anwenden.
@sephi23: 你去什么地方都有很多个中国人。(stimmt das?)
Egal wo man hingeht, es gibt immer viele Chinesen da.
Meist isses sogar ein ganzer Haufen
Bist du einer davon oder kannst du nur Chinesisch oder hast du das gebabelfisht?
am port c währe gut und die pins 0 1 2
könntest du es im Bascom machen da ich kein assembler kann und ich erst gerade angefangen habe mit progen und nicht die sprache wechseln möchte
Bascom kann ich leider nicht! Mach ma so! Ich probiers in Assembler und schicke dir dass Programm! OK?
MFG
Mike
Also mal meine Vorgehensweise als IDEE - allerdings komme ich aus der Zeh-Welt, also keine Ahung was Basic da hergibt.
Timer Interrupt alle 2 ms - Timerfunktion:
Wenn Taster gedrückt, dann hierbei Variable hochzählen
danach auswerten:
wenn Schwellwert I erreicht (z.b 200 entsp. 100 ms Tastendrücken), Flag setzen
nach Schwellert Ia erreicht und Flag I gesetzt und kein Tastendruck mehr, dann wars ein kurzer Tastendruck - entsp. Flag setzen *)
wenn Schwellwert II erreicht (z.b. 500 entsp. 1 s tastendrücken), dann langer Tastendruck erreicht - entsp. Flag setzen *)
*)die Flags werden außerhalb der Timerfunktion ausgewertet und wieder gelöscht
Hat auch den Vorteil, daß man nebenbei die Taste entprellt ...
Wer keinen langen Tastendruck aber doppelmeldung will, muß einfach nur nach Flag Ia den Zähler zurücksetzen
Ich nutze die lange Tastenerkennung um z.B. Einstellungen zu speichern (so wie beim Autoradio) .. das spart ja/nein gefrage
Zähler muß auch gelöscht werden, wenn Schwellerte nicht erreicht werden. Hierzu zweiten Zähler verwenden ...
Hoffe die Idee kommt an ...
Die Vorgehensweise hat auch den Vorteil, daß kein Ausbremsen des uC stattfindet wie z.b. wenn man wait befehle einbaut - diese sollte man auch nie in Interruptroutinen verwenden ! Meine Meinung.
Hop it helps,
Vajk
Ich kann mir keine Signatur leisten - bin selbständig!
Hi VAJK!
Kann dass so stimmen?
#include <m8def.inc>
ldi R16, 0xff ;In R16 Wert 0xff laden
ldi R17, 0x01 ;In R17 Wert 0x01 laden
ldi R24, 0x02 ;In R24 Wert 0x02 laden
ldi R21, 255 ;In R21 Wert 255 laden
ldi R23, 0b00000010 ;In R23 Wert 0b0000010 laden
ldi R24, 0b00000100 ;In R24 Wert 0b00000100 laden
Start:
in R18, PINC ;Schreibe in R18, PINC
cpse R17, R18 ;Vergleiche R17 mit R18. Wenn gleich nächsten Schritt (rjmp Start) überspringen
rjmp Start ;Springe zu Start
Einmal:
out PORTC, R23 ;Ausgabe an PORTC, R23
in R18, PINC ;Schreibe in R18 PINC
cpse R17, R18 ;Vergleiche R17 mit R18. Wenn gleich nächsten Schritt (rjmp Einmal) übersrpingen
rjmp Einmal ;Springe zu Einmal
cbi PINC, 0x00 ;Alle Bit´s in PINC löschen
rjmp Zeitschleife ;Springe zu Zeitschleife
Zweimal:
out PORTC, R24 ;Ausgabe an PORTC, R24
in R18, PINC ;Schreibe in R18, PINC
cpse R17, R18 ;Vergleiche R17 mit R18. Wenn gleich nächsten Schritt (rjmp zweimal) überspringen
rjmp Zweimal ;Springe zu Zweimal
rjmp Einmal
Zeitschleife:
inc R20 ;erhöhe R20 um 1
cpse R20, R21 ;Vergleiche R20 mit R21
rjmp Zeit ;Springe zu Zeit
inc R22 ;erhöhe R22 um 1
Zeit:
sbrs R22, 0x05 ;Vergleiche R22 mit 0x05. Wenn gleich nächsten Schritt (rjmp Abfrage) überspringen
rjmp Abfrage ;Springe zu Abfrage
cbr R22, 0x20 ;Lösche alles in R22
rjmp Einmal ;Springe zu Einmal
Abfrage:
in R18, PINC ;Schreibe in R18, PINC
cpse R17, R18 ;Vergleioche R17 mit R18. Wenn gleich nächsten Schritt (rjmp Zeitschleife) überspringen
rjmp Zeitschleife ;Springe zu Zeitschleife
cbi PINC, 0x00 ;In PINC alle Bit´s löschen
cbr R18, 0x01 ;Lösche alles in R18
rjmp Zweimal ;Springe zu Zweimal
danke viel mal jetzt müsste ich das nür noch irgend wie für Bascom ändern aber wie?
Lesezeichen