Attiny 2313 Lauflichter mit Timerschaltung -- Code geht nicht

  • Hallo Forengemeinde,


    da ich mir rechtzeitig zum Uefa-Cup Spiel vom FC Bayern gegen Zenit ein kleines Schild gebastelt habe und das mit LEDs verziert habe,
    aber mit dem Microcontrollerprogramm in Basic noch so meine Probleme habe, wollte ich hier mal fragen.


    Es sollen verschiedene Lauflichter ablaufen, mit zwei Schaltern steuerbar.
    Leider habe ich das ganze aber einmal auf dem Steckbrett aufgebaut und es funktionierte nicht so wie es soll.
    Liegt es daran, dass ich keine Schalter in dem Probeaufbau verwendet habe? Wollte einfach mal schauen ob überhaupt das normale Lauflicht geht.
    Das geht aber nur ohne diesen Timer-Zusatz.


    Ist vielleicht der Timer falsch eingesetzt oder ein Fehler im Code? Bascom zeigt aber an "No errors found"


    Muss man beide Timer verwenden und an beide die Schalter anschließen? Kann man die Schalter nicht an beliebige Ports anschließen?


    Oder benötige ich Pull-Up Widerstände o.Ä. (Kenn mich damit aber nicht aus)
    Code:


    So Erklärung:


    Der Attiny2313 hat zwei Timer. T0 und T1. Es wurde nur mit T0 gearbeitet.


    Nur kann ich aus dem Datenblatt nicht herauslesen, welcher der 8-und welcher der 16bit Timer ist.


    Datenblatt


    Prinzip:


    Es werden zwei Taster/Schalter an zwei im Code festgelegte I/O Ports angeschlossen und dann durch drei verschiedene IF-Abfragen
    die jeweiligen Programme abgerufen.




    Ich hoffe mir kann jemad helfen,


    FloH

  • In Stichworten:
    - Eine ISR darf keinen LOOP enthalten!
    - Eine ISR darf kein WAIT(MS) enthalten! (bzw.. nur sehr kurze und wenns nicht anders geht)
    - Außerdem sollte die ISR möglichst kurz sein.
    - Zusätzlich wäre die ISR viel zu schnell - der Overflow vom Timer kommt alle paar ms.
    - Den Timer müsste man glaubich auch starten.
    - PortB = 01010101 geht nicht! Das ist eine 8-stellige Ganzzahl. Byteschreibweise wäre: &B01010101



    Ansonsten schon nicht schlecht, aber du musst etwas umdenken:
    - In der Timer-ISR werden nur die Taster abgefragt und dann im Hauptprogramm ausgewertet. (Status-Bits und WHILE/WEND benutzen)
    - Du musst die Durchläufe nicht manuell angeben, schau die mal den Befahl ROTATE an - genau das willst du.
    - Das hätte dann auch den Vorteil, dass die Schleifen nicht so lang werden und direkt nach dem aktuellen Schritt die Richtung wechselt.

  • Ansonsten schon nicht schlecht, aber du musst etwas umdenken:


    Irgendwie fühl ich mich jetzt auch angesprochen. Diese ganzen (ich möchte es mal so formulieren) Basics hab ich zwar irgendwo schonmal benutzt oder zumindest gelesen, aber gibts das irgendwo zufällig auch zusammen gefasst im Netz? :)