Tasterschaltung programmieren

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 26 11 2025  13:22:29      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Oszilloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


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
ICQ Status  

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 ]


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 16 Beiträge im Durchschnitt pro Tag       heute wurden bisher 5 Beiträge verfasst
© x sparkkelsputz        Besucher : 186825914   Heute : 23547    Gestern : 47700    Online : 513        26.11.2025    13:22
26 Besucher in den letzten 60 Sekunden        alle 2.31 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.111172199249