Hallo erstmal ich habe eigentlich kaum Ahnung von der programmierung eines Pics deshalb benötige ich eure Hilfe. Danke schonmal im vorraus. Wir müssen an unserer Schule eine Schulterschiene machen und ich und mein Freund müssen die nötige Software für jene proggen. Als Pogrammieroberfläche benutzen wir MPLAB.Mein Problem ist nun folgendes ich muss einen Eingang des Pics mit einem multiplexverfahren abfragen ich kann mir vorstellen was das ist habe aber keine ahnung wie das funktioniert. Ich habe mir das irgendwie so vorgestellt while(1){ if(a==1){ blabla } } das ist ansich ok das problem ist das der eingang nur dann auf 1 schaltet wenn ein Taster gedrückt wird und man müsste genau dann drücken wenn die If schleife abgefragt wird und hat somit eigentlich keine chance diese auszuführen bin für jeden Source code dankbar.
hmm anscheinend habe ich mich getäuscht indem was ich gesagt habe und hab erstma anschiss vom vom lehrer bekommen zurecht also werd ich das ganze in ruhe noch einmal erklären . mir ham ne Tastatur matrix mit 12 Tasten d.h. da das ne matrix is und die einzelnen segmente harwaremäßig irgednwie ausgewählt werden brauch ich weniger I/O ports am pic selber um die Tastatur zu interpretieren das problem ist das selbe ich brauch nen source code mit dem diese 12ermatrix abgefragt wird danke.
Lukas Spielberger wrote: > Ich habe mir das irgendwie so vorgestellt > > > > while(1){ > > if(a==1){ > > blabla > > } > } > > das ist ansich ok das problem ist das der eingang nur dann auf 1 > schaltet wenn ein Taster gedrückt wird und man müsste genau dann drücken > wenn die If schleife abgefragt wird und hat somit eigentlich keine > chance diese auszuführen ? Bist du dir im klaren wie schnell ein µC arbeitet. Das Gegenteil ist eher der Fall: Du wirst mit diesem Code (sofern man das überhaupt Code nennen kann) Schwierigkeiten haben, das if nur einmal ausführen zu lassen, wenn du einmal die Taste drückst. Je nach Taktfrequenz des Prozessors sieht der in jeder Sekunde mindestens 100000 mal am Port nach ob die Taste gedrückt ist. So schnell kannst noch nicht mal du eine Taste drücken und wieder loslassen.
Lukas Spielberger wrote: > hmm anscheinend habe ich mich getäuscht indem was ich gesagt habe und > hab erstma anschiss vom vom lehrer bekommen zurecht also werd ich das > ganze in ruhe noch einmal erklären . > > > mir ham ne Tastatur matrix mit 12 Tasten d.h. da das ne matrix is und > die einzelnen segmente harwaremäßig irgednwie ausgewählt werden brauch > ich weniger I/O ports am pic selber um die Tastatur zu interpretieren > das problem ist das selbe ich brauch nen source code mit dem diese > 12ermatrix abgefragt wird danke. Ne.ne. Dein Lehrer hat euch diese Aufgabe sicherlich nicht gegeben damit ihr ins nächste Forum geht und euch dort sowohl Hardware als auch Software erschnorrt. Wenn du konkrete Probleme hast: Bitte gerne Aber so ein Rundumschlag: Nein, danke
>mir ham ne Tastatur matrix mit 12 Tasten d.h. da das ne matrix is und >die einzelnen segmente harwaremäßig irgednwie ausgewählt werden brauch >ich weniger I/O ports am pic selber um die Tastatur zu interpretieren >das problem ist das selbe ich brauch nen source code mit dem diese >12ermatrix abgefragt wird danke. Schonmal was von google gehoert? >Ne.ne. >Dein Lehrer hat euch diese Aufgabe sicherlich nicht gegeben >damit ihr ins nächste Forum geht und euch dort sowohl >Hardware als auch Software erschnorrt. >Wenn du konkrete Probleme hast: Bitte gerne >Aber so ein Rundumschlag: Nein, danke Sehe ich genauso.
Ihr könntet mir ja sagen ob der ansatz richtig ist sonst verwerf ich das ganze mal bzw. könntet ihr mir eine einfache Tastaturmatrix erklären falls ihr lust und laune habt. bzw. wenn ich bei google was gefunden hätte wäre ich net hier. Mir würde es schon reichen wenn mir jemand erklären würde wie ich das mit der einen Taste mache danke
@ Lukas Spielberger (asdf) >hmm anscheinend habe ich mich getäuscht indem was ich gesagt habe und >hab erstma anschiss vom vom lehrer bekommen zurecht also werd ich das Liest der hier mit ? ;-) >mir ham ne Tastatur matrix mit 12 Tasten d.h. da das ne matrix is und >die einzelnen segmente harwaremäßig irgednwie ausgewählt werden brauch >ich weniger I/O ports am pic selber um die Tastatur zu interpretieren So sieht es aus. >das problem ist das selbe ich brauch nen source code mit dem diese >12ermatrix abgefragt wird danke. Irrtum, DU sollst ihn dir ERARBEITEN. Nicht nur Copy & Paste. Hier ein paar kleine Ansatzpunkte. Multiplexen Beitrag "Matrixtastatur am AVR" Ist zwar für den AVR, das Prinzip ist aber beim PIC genauso. MFG Falk
Mir ist nun fast alles klar ich verstehe diese 4*4 Matrix und wie ich das einlesen muss also mit den Reihen und dann die ganze Spalte abfragen um die entsprechende Tast ezu erhalten ich habe mir das so vorgestellt: Ich frage alle 8 Leitungen permanent und falls z.B. PB5(1) und PB3(0) ist erhalte ich meine gewünschte Taste löse einen Interrupt aus der mir dann die gewünschte Funktion ausführt. Programmiertechnisch alles kein Problem bis auf dieses dauerhafte abfragen ich habe das bisher nur mit Polling gemacht würde gerne wissen ob das dauerhatfe Abfragen so geht :main() { while(true) { delay(30ms) if(input(pin_a0)){ } }
Schonmal nen Timer mit passendem Interrupt verwendet? Sowas wird i.d.R. für Tastergeschichten ganz gern genommen. Ich hab keine Ahnung von PICs, da musste selber mal im Datenblatt gucken gehen.
Du meinst einen Interrupt der z.b. alle 20ms ausgeführt wird und welcher dann alle Ports der matrix abfragt ?
Lukas Spielberger wrote: > Problem bis auf dieses dauerhafte abfragen ich habe das bisher nur mit > Polling gemacht würde gerne wissen ob das dauerhatfe Abfragen so geht > > :main() > { > > while(true) > { > delay(30ms) > if(input(pin_a0)){ > > } > } Das ist Polling! Polling nennt man es wenn man ständig die Eingänge abfragt. Im Gegensatz zum Interrupt, bei dem sich Eingang 'selbsttätig' beim Programm meldet um mitzuteilen, dass sich etwas ereignet hat. Damit pollt deine Schleife ständig den pin_a0 (wenn ich das input(pin_a0) mal richtig interpretiere. Der delay ist wahrscheinlich nicht unbedingt notwendig, könnte aber in einem ersten Ansatz mal das Prellen etwas dämpfen. Schön ist es nicht, aber im Moment hast du ganz andere Probleme als eine Diskussion über Tasten-prellen. > Programmiertechnisch alles kein Problem Deinen Optimismus möchte ich haben :-) Aber ich will dich nicht abhalten.
>würde gerne wissen ob das dauerhatfe Abfragen so geht Nein, geht es nicht. Wenn man Buttons abfragt, sollte man eine Flankenerkennung verwenden, dahinter eine kleine Verzögerung, um das Prellen nicht als weitere Flanken mitzuzählen, dann nachsehn, ob sich nochmals was am Pin-zustand geändert hat... Siehe dazu: Entprellung AVR-Tutorial: Tasten oder auch diverse Beiträge in der Codesammlung.
Naja Programmiertechnisch alles kein Problem isses ja wirklich nicht ich programmier einen interrupt der alle 20ms ausgeführt wird (kann ich) der dann alle Ports abfragt ( auch kein Problem) und da ich 4*4 hab benutz ich ein Array indem 8 Bits drinnen sind und der Interrupt vergleicht dann immer die Speicher und falls dieser sich verändert tja da fällt mir schon was ein ...
@ Karl heinz Buchegger (kbuchegg)
>Irgendwie erinnert mich das an Buzzword-Bingo :-)
Na wnn du auf die Semaphore atomar einen Taskswitch castest, dann ist
klar dass der Scheduler nicht reentrant auf dein Array zugreifen kann,
weil . . .
;-)
MFG
Falk
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.