Multiplexing HILFE

OP #726029
Lesenswert?

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.
OP #726042
Lesenswert?

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.
#726056
Lesenswert?

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.
#726059
Lesenswert?

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
Gast #726063
Lesenswert?

>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.
OP #726070
Lesenswert?

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
#726073
Lesenswert?

@ 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
OP #726110
Lesenswert?

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)){

      }



  }
#726118
Lesenswert?

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.
#726120
Lesenswert?

>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.
OP #726121
Lesenswert?

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 ...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren