Servus erst mal, leider habe ich keinen Code gefunden und wollte nun fragen ob ihr eine Möglichkeit kennt über nur einen Input also mit einem Taster eine Binärzahl zu schreiben. Mein Gedankengang war bislang dass wenn der Taster länger als eine Sekunde gedrückt wird, eine 1 geschrieben wird, und bei weniger als einer Sekunde eine Null geschrieben. Dann muss er nur noch nach jedem Loslassen des Tasters einen Bit weiter rutschen. Jetzt versteh ich nur noch nicht wie er zwischen der Drückzeit unterscheidet und die Bits weiterschiebt. Vielen Dank schonmal, Gruß Markus
:
Verschoben durch Moderator
Der Striker schrieb: > Servus erst mal, > > leider habe ich keinen Code gefunden und wollte nun fragen ob ihr eine > Möglichkeit kennt über nur einen Input also mit einem Taster eine > Binärzahl zu schreiben. > Mein Gedankengang war bislang dass wenn der Taster länger als eine > Sekunde gedrückt wird, eine 1 geschrieben wird, und bei weniger als > einer Sekunde eine Null geschrieben. Die Grenze wirst du auch kürzer machen können, damit die Eingabe etwas schneller möglich ist. Man kann einen Tastendruck problemlos kürzer als 500 ms oder auch 250 ms hinbekommen. Wenn du eine Taste kurz antippst, liegst du unter 100 ms (je nach Taster natürlich). > Jetzt versteh ich nur noch nicht wie er zwischen der Drückzeit > unterscheidet Indem du sie mißt. Also Timer mitlaufen lassen, beim Drücken den Wert des Timers merken, beim Loslassen dann nochmal. Dann die Differenz bilden. > und die Bits weiterschiebt. Beim Loslassen halt einen Shift machen.
Man könnte mit 1x drücken = 0 und 2x schnell hintereinander drücken = 1 arbeiten, dann ist man nicht so vom Timing abhängig. Du kannst Dir auch spaßhalber mal einen Morsedecoder anschauen um Inspiration zu finden (-;
Draco schrieb: > Man könnte mit 1x drücken = 0 und 2x schnell hintereinander drücken = 1 > arbeiten, dann ist man nicht so vom Timing abhängig. Du verlagerst die Abhängigkeit nur von der Drückdauer auf die Pausendauer und mußt erkennen, wie oft hintereinander mit kurzer Pause gedrückt wurde.
Rolf Magnus schrieb: > > Beim Loslassen halt einen Shift machen. Jetzt müsste ich nur noch wissen wie der Shift funktioniert. Meine Idee war bislang den Taster mit allen 8 Pins zu verbinden und dann jeweils nur den Pin als eingang zu schalten der benötigt wird. Gruß, Markus
Der Striker schrieb: > Rolf Magnus schrieb: > >> >> Beim Loslassen halt einen Shift machen. > > Jetzt müsste ich nur noch wissen wie der Shift funktioniert. > Meine Idee war bislang den Taster mit allen 8 Pins zu verbinden und dann > jeweils nur den Pin als eingang zu schalten der benötigt wird. > Bitmanipulation sowie jedes C-Buch. Ach komm, das sind doch alles Grundlagen.
ich gehe mal davon aus dass du die Serielle Schnittstelle benutzt. Dann musst du nur den Pin mit einer Zeitschleife abfragen. In Visual Basic gibt es keine Bitmanipulation, an welcher Stelle hakt es denn genau? Pete
Herzlichen Dank für eure Antworten, ich habs jetzt geschafft, zumindest die 8-Bit Zahlen. Aber 16 ist ja auch nicht mehr schwer. Sorry dass ich mich etwas doof anstelle, bin leider noch blutiger Anfänger und habe mein Board erst seit ein paar Tagen. Gruß, Markus
Der Striker schrieb: > Sorry dass ich mich etwas doof anstelle, bin leider noch blutiger > Anfänger und habe mein Board erst seit ein paar Tagen. Das bedeutet aber nicht, daß du deshalb gleich essenzielle Informationen weglassen mußt, wie z.B. was für einen µC du eigentlich programmieren willst und vor allem, welche Programmiersprache du dir dafür ausgesucht hast.
Peter schrieb: > In Visual Basic > gibt es keine Bitmanipulation, Bist Du sicher??? Haben die Bytes in VB keine Bits?? Gibt es kein AND, OR, NOT, EOR?? Bitmanipulation ist kein kryptischer Befehl, sondern die Verfahrensweise, wie man einzelne Bits setzt, löscht oder kippt, ohne die anderen Bits dabei zu beeinflussen. Das ist in jeder (ernsthaften) Programmiersprache möglich, kann aber in jeder Sprache ein kleines bissel anders aussehen. ...
Draco schrieb: > Man könnte mit 1x drücken = 0 und 2x schnell hintereinander drücken = 1 > arbeiten, dann ist man nicht so vom Timing abhängig. Naja, statt die Dauer des Tastendrucks auszuwerten, muß man dann halt die Dauer der Pausen ausmessen. SO riesig ist der Unterschied nicht.
Hi Ich weiß nicht, warum unbedingt unterschiedliche Betätigung eines Tasters in Frage kommt. Warum nicht die steigende oder fallende Flanke bei Tastendruck erkennen und ein Byte hochzählen lassen.Bestenfalls eine Pase zum detektieren vom Weiterschalten einer Dekade oder zum Resetten des Zählers für Neuanfang. Viele Bauteile mit abgespekter Bedienebene arbeiten so. Es ist auch viel einfacher, da man hier ganz normal die Prellzeit abwarten kann und nicht in "Bedienstreß" verfällt. 1 sekunde kein Tastersignal, dann halt nächster Zähler.... Ne Flankenauswertung ist auch kein Problem... Old_Wert exclusiv-Oder Neuwert -- Gesetzte Bits sind "Änderungen" neu_Wert verundet mit Änderung -- Signalwechsel von "0" nach "1" Old_Wert verundet mit Änderung -- Signalwechsel von "1" nach "0" Flankenbit abfragen, wenn gesetzt, dann zählen und Flankenbit löschen, oder geht es wirklich darum, einzelne Bits zu setzen ? Nun auch das geht, ist aber zugegebenermaßen nicht lustig, eine 8-Bitzahl von 255 zu erreichen.... Gruß oldmax
Rolf Magnus schrieb: > Das bedeutet aber nicht, daß du deshalb gleich essenzielle Informationen > weglassen mußt, wie z.B. was für einen µC du eigentlich programmieren > willst und vor allem, welche Programmiersprache du dir dafür ausgesucht > hast. Sorry dass ich das weggelassen habe. Ich verwende einen Mega16 und programmiere in C. Für den, den es interessiert, habe ich das Problem mit der Unterscheidung der Zeit nun so gewandelt dass ich keine Zeit oder Flanke messe sondern einfach den Analog-Eingang verwende und vor diesen einen Folienkondensator geschaltet habe der über einen 10MOhm Widerstand geladen wird. Dann brauchte ich nur eine Fallunterscheidung einbauen ob die Spannung größer oder kleiner ist. Das ganze schien mir einfacher und ich habe noch mehr Pins frei falls nochmal mehr angeschlossen wird. Gruß, Markus
Also offensichtlich ein Troll. Menschen, die einen ADC in Betrieb nehmen können, aber keine Bits verschieben können gibt es nicht.
Der Striker schrieb: > den Analog-Eingang verwende und vor diesen einen > Folienkondensator geschaltet habe der über einen 10MOhm Widerstand > geladen wird. Höchste Zeit, mal ins Datenblatt zu schauen. Da gibt es nämlich sone ulkigen Dinger, die nennen sich Timer. Und die machen genau das, nämlich einen fortlaufenden Wert zu liefern, der proportional zur Auslesezeit ist. Um zu wissen, ob eine bestimmte Zeit vergangen ist, muß man sie nichtmal auslesen. Man setzt einfach eines der Compareregister auf die gewünschte Zeit und testet dann das Compareflag. Peter
Peter Dannegger schrieb: > Um zu wissen, ob eine bestimmte Zeit vergangen ist, muß man sie nichtmal > auslesen. Man setzt einfach eines der Compareregister auf die gewünschte > Zeit und testet dann das Compareflag. > > > Peter Danke für den Tipp mit dem Flag, dass macht das ganze noch etwas übersichtlicher.
Mann nennt das auch morsen ;-). Dafür gibt es Beuspielcode zu Hauf !
Bitschieber schrieb: > Also offensichtlich ein Troll. > Menschen, die einen ADC in Betrieb nehmen können, aber keine Bits > verschieben können gibt es nicht. Doch! Es kommt nur darauf an, welches Tutorial man gerade liest.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.