Forum: Mikrocontroller und Digitale Elektronik LED Matrix PIC ansteuerung


von Michael (Gast)


Lesenswert?

Hallo,
ich habe einen PIC16F887 und versuche gerade eine 10x10 LED Matrix damit 
anzusteuern um ein kleines "Snake" game zu basteln.
Nach ein paar versuchen muss ich aber feststellen, dass der PIC mit 8MHz 
internem Oszillator vielleicht etwas zu langsam bzw. schwach ist.
Meint ihr es ist ganz gut mit diesem PIC machbar und ich habe es einfach 
"schlecht" programmiert oder sollte ich einen externen Oszillator mit 
einer höheren Frequenz nehmen oder vielleicht sogar auch stattdessen auf 
einen anderen 32er PIC umsteigen?

Ein grober Ablauf sieht in etwa so aus:

1.PIC wird gestartet

2.Lege ein Array aus unsigned short an was 10 lang ist.
(10 Lang für die 10 LED's an der Y Achse und das unsigned short für 16 
Bit um den zustand der LED's auf der X Achse darzustellen, also jede LED 
wird durch ein Bit repräsentiert)

3.Aktiviere den Timer0 Interrupt, der sich um die Spiellogik kümmert
(Bei Snake passiert das ja nur ca. 2 mal die Sekunde).
Wenn es einen Time0 Interrupt gibt setze alle Bits des Arrays auf 0, 
behandle die Spiel Logik z.B. wenn eine bestimmte Taste unten ist die 
Schlange nach oben bewegen, und zeichne anschließend die Schlange und 
das essen oder andere Sachen(Damit meine ich, dass die entsprechenden 
Bits in dem Array gesetzt werden).

3.Zeichne die ganze Zeit das Array indem ich über das komplette Array 
iteriere das entsprechende Bit abfrage und gegebenenfalls die LED kurz 
aufleuchten lasse(Ich kann ja immer nur eine LED zu einem Zeitpunkt 
ansteuern)

von Michael (Gast)


Lesenswert?

Ach ja, hier überhaupt der Grund warum ich meine, dass der PIC zu 
langsam ist:
Die LED's flackern.
Ich glaube das passiert einfach weil ich die nicht oft genug an und aus 
schalten kann.

von picler (Gast)


Lesenswert?

der PIC schafft das locker
also such den Fehler in deinem Programm

von tip (Gast)


Lesenswert?

Als Tip:
nicht direkt die Ausgangsregister bitweise manipulieren.
Sondern eine extra Variable anlegen und diese dann gemeinsamm auf das 
Ausgangsregister schreiben.

von Noch einer (Gast)


Lesenswert?

> 3.Zeichne die ganze Zeit das Array

Machst du das in einem Interrupt?

Normalerweise nimmt man für das LED-Multiplexing einen Interrupt, der 
die LEDs ohne Störungen gleichmäßig ansteuert.

Der 0,5 Sekunden Interrupt setzt nur ein Flag, beendet sich sofort 
wieder, damit er den LED Interrupt nicht zu lange unterbricht.

Die Hauptschleife kümmert sich dann in der übrig bleibenden Zeit um 
Tasten und Spiellogik.

von Max H. (hartl192)


Lesenswert?

Michael schrieb:
> Meint ihr es ist ganz gut mit diesem PIC machbar und ich habe es einfach
> "schlecht" programmiert
Ja, genau. Und wenns garnicht geht kannst du den PIC immer noch mit 
20MHz takten.

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
Noch kein Account? Hier anmelden.