| Autor |
|
Tasterschaltung programmieren |
|
|
|
|
BID = 441952
Bastler1234 Gesprächig
  
Beiträge: 107 Wohnort: Kirchberg an der Murr
|
|
Hi ich bins mal wieder,
ich hab im Moment ein Problem bei der Programmierung einer Steuerschaltung für meinen Selbstbauvorverstärker.
Das Programm soll die Tastendrücke an einem Pin zählen und dann schauen, ob es eine gerade oder ungerade Zahl ist. Je nachdem soll es dann einen Portpin auf High oder Low schalten. Ich hab jetzt schon ne Stunde versucht selber auf die Lösung zu kommen aber es hat nicht geklappt bin leider nicht gerade ein Matheprofi.
Das ganze soll in Bascom programmiert werden, als Mikrocontroller will ich nen Atmega32 nehmen aber das tut hierbei ja eher nichts zur Sache.
Vielen Dank schonmal für eure Antworten. |
|
BID = 441954
DonComi Inventar
     
Beiträge: 8604 Wohnort: Amerika
|
|
Moin,
bei einer graden Zahl ist das letzte Bit (Bit0/LSB) immer 0, bei einer ungeraden Zahl immer 1.
(zumindest bei Ganzzahlen)
Ergo reicht es aus, zu testen, ob das letze Bit gesetzt oder gelöscht ist:
if variable And &H1 then
'setze Pin
else
'lösche Pin
end if
in C:
if(var & 0x1)
port|= 0x1;
else
port&=~(0x1);
Edit: Zur Erklärung:
Die logische Und-Verknüpfung wird nur dann wahr, wenn Bit0 gesetzt ist:
variable_: xxxxxxxn
vergleich: 00000001
x ist unwichtig, denn irgendwas und 0 ist immer 0!
Wenn n 1 ist, dann ist auch der Ausdruck größer 0, also wahr.
Wenn n 0 ist, wird der Ausdruck 0, also unwahr.
Zählen ist ja klar:
Wenn Taste gedrückt wurde, dann musste die Variable hochzählen:
Basic:
var = var + 1
(oder inc var) 'inkrementieren
Dann eben wie oben beschrieben testen.
Zählen der Tasterimpulse sollte nur nach dem Entprellen stattfinden, da sonst sehr viel gezählt wird. Also einfach ein paar 10ms abwarten. Oder besser Timer benutzen.
_________________
[ Diese Nachricht wurde geändert von: DonComi am 8 Jul 2007 19:28 ]
[ Diese Nachricht wurde geändert von: DonComi am 8 Jul 2007 19:30 ] |
|
BID = 441955
Her Masters Voice Inventar
     
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 5312 Wohnort: irgendwo südlich von Berlin
|
versuch mal Modulo, das sollte tun was du willst.
_________________
Tschüüüüüüüs
Her Masters Voice
aka
Frank
***********************************
Der optimale Arbeitspunkt stellt sich bei minimaler Rauchentwicklung ein...
***********************************
|
BID = 441957
Bastler1234 Gesprächig
  
Beiträge: 107 Wohnort: Kirchberg an der Murr
|
Danke für eure Antworten
@Her Masters Voice
wie funktioniert den das mit dem Modulo?
Bin noch ziemlicher Anfänger in Bascom
|
BID = 441962
Her Masters Voice Inventar
     
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 5312 Wohnort: irgendwo südlich von Berlin
|
google mal nach Modulo. Das ist eine mathematische Funktion die den Rest einer Division ausgibt. Teile eine grade Zahl durch 2 und es bleibt kein Rest, bei einer Ungraden schon.
_________________
Tschüüüüüüüs
Her Masters Voice
aka
Frank
***********************************
Der optimale Arbeitspunkt stellt sich bei minimaler Rauchentwicklung ein...
***********************************
|
BID = 441964
DonComi Inventar
     
Beiträge: 8604 Wohnort: Amerika
|
Nur dass eine Mod-Division einer großen Zahl (beispielsweise 0xFF) länger dauert, als das letze Bit zu maskieren.
_________________
|
BID = 441965
Bastler1234 Gesprächig
  
Beiträge: 107 Wohnort: Kirchberg an der Murr
|
@ Don Comi
Deine Lösung hab ich auch gerade ausprobiert, er hat aber ne Fehlermeldung gebracht
Ich habs so eingeben.
If Count1 And &H1 Then 'Count 1 ist der Zähler den lass ich mit
einer Debounce Funktion hochzählen.
Standbyr = 0 'Standbyrelais aus
Wait 1
Lowerline 'Untere LCD Zeile auswählen
Wait 1
Lcd "Standby" 'Standby
auf Lcd anzeigen
Wait 1
Count1 = 0
Else
Standbyr = 1 'Standbyrelais ein
Lowerline
Wait 1
Lcd "-------" 'Lcd
löschen
Wait 1
Count1 = 1
End If
|
BID = 441966
DonComi Inventar
     
Beiträge: 8604 Wohnort: Amerika
|
Und was für eine Fehlermeldung?
Das muss an deinem Kode liegen, die Maskierung stimmt.
Edit:
Ver... Bascom.
Der Kode erzeugt bei mir auch eine Fehlermeldung.
Dann musste das doch mit einer zweiten Variablen umgehen:
So oder so ähnlich:
Incr Count
Ist_grade = Count And 1
If Ist_grade > 0 Then
_________________
[ Diese Nachricht wurde geändert von: DonComi am 8 Jul 2007 19:59 ]
|
BID = 441968
Bastler1234 Gesprächig
  
Beiträge: 107 Wohnort: Kirchberg an der Murr
|
Fehlermeldung ist 3 parameters expected.
und if then expected.
|
BID = 441971
Bastler1234 Gesprächig
  
Beiträge: 107 Wohnort: Kirchberg an der Murr
|
Ich habs jetzt nochmal mit Modulo getestet, danke für den Tipp jetzt hat er ohne murren kompiliert, die Frage ist halt jetzt noch, ob das auch so tut wie ich das will.
ich häng jetzt mal den Code an. Hab aber bis jetzt nur die Standbyfunktion umgeschrieben.
Dein neuer Vorschlag hat jetzt geklappt, werde das gleich mal bei den anderen Tastern ändern.
Ok hänge jetzt die finale Version an, falls jemand etwas ähnliches vorhat.
[ Diese Nachricht wurde geändert von: Bastler1234 am 8 Jul 2007 20:47 ]
|
BID = 441972
Racingsascha Schreibmaschine
    
Beiträge: 2247 Wohnort: Gundelsheim
|
Wenn es nicht darauf ankommt wieviele Tastendrücke es waren kann man doch auch einfach per Interrupt ein Bit in irgendeinem unbenötigten Register toggeln. 1. Druck: ein, 2. Druck: aus, 3. Druck: ein usw
_________________
Fnord ist die Quelle aller Nullbits in deinem Computer.
Fnord ist die Angst, die Erleichterung, und ist die Angst.
Fnord schläft nie.
|
BID = 441981
Bastler1234 Gesprächig
  
Beiträge: 107 Wohnort: Kirchberg an der Murr
|
Ok im Simulator funktioniert das Programm noch nicht richtig, beim ersten Start, schaltet er alle möglichen Kanäle durch obwohl er das eigentlich nicht soll. Muss mal schauen, was da noch falsch ist.
Mist er spring irgendwie immer gleich in die If Funktionen um die Kanäle zu schalten, dass soll er aber nicht. Was sollte ich da noch ändern.
MfG Fabian
[ Diese Nachricht wurde geändert von: Bastler1234 am 8 Jul 2007 20:59 ]
|
BID = 441993
Bastler1234 Gesprächig
  
Beiträge: 107 Wohnort: Kirchberg an der Murr
|
So habs jetzt endlich hinbekommen im Simulator tuts schonmal, danke an alle die mir hier geholfen haben. Die letzte Version ist nun die hier.
[ Diese Nachricht wurde geändert von: Bastler1234 am 8 Jul 2007 21:45 ]
|