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)
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.
Als Tip: nicht direkt die Ausgangsregister bitweise manipulieren. Sondern eine extra Variable anlegen und diese dann gemeinsamm auf das Ausgangsregister schreiben.
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.