www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Multiplexing HILFE


Autor: Lukas Spielberger (asdf)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lukas Spielberger (asdf)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lukas Spielberger (asdf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei der weilschleife einen delay setzen macht das sinn ?

Autor: Torben (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lukas Spielberger (asdf)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lukas Spielberger (asdf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dankeschön

Autor: Lukas Spielberger (asdf)
Datum:

Bewertung
0 lesenswert
nicht 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)){

      }



  }

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Lukas Spielberger (asdf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du meinst einen Interrupt der z.b. alle 20ms ausgeführt wird und welcher 
dann alle Ports der matrix abfragt ?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: M. V. (-_-)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lukas Spielberger (asdf)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwie erinnert mich das an Buzzword-Bingo  :-)

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.