Zähler mit Atmega 32

  • Hallo,


    ich habe mich heute zum ersten mal mit dem programmieren von µC versucht. Ich möchte einen Zähler haben, der bei jedem Tastendruck eins hochzählt. An Port B und C sollen je eine 7Segmentanzeige angeschlossen werden. Port B ist die 1. Stelle, Port C die 2.
    Als Controller möchte ich einen AtMega32 verwenden.


    Kann dass so funktionieren?


    Schon mal vielen Dank für euere Hilfe.
    Gruß Matze1992

    :led: 0815 - Mit der Lizenz zum Löten :led:
    Wer Rechtschreibfehler findet darf sie behalten oder in Ebay verkaufen.

  • Auch wenn ich nicht der Bascom Programmierer bin:
    Nach 22 macht der dann allerdings nichts mehr. Da bleibt dann der Zähler stehen. Da wäre es evtl noch Sinnvoll eine "Überlaufanzeige" einzurichten oder wieder von vorne zu beginnen. Je nachdem was du dann machen willst.


    Ich würde da für die Zehnerstelle nicht so viele Fälle definieren, sondern halt pro Zahl eine. Wenn die Einerstelle bei 9 ist, dann die Zehnerstelle +1 und die Einerstelle wieder auf 0. so kommst du dann auch auf 99 ohne alls 99 Fälle definieren zu müssen.


    Eine Überlegung wäre auch noch die Ansteuerung zu ändern. so brauchst du halt jetzt 14 Pins. Da gibts andere Möglichkeiten wo du weniger Pins brauchst. Dann tuts evtl auch ein kleinerer Controller.


    Ist das eine 2??


    Dim(20) = &B00000110
    Dim(21) = &B01011011
    Dim(22) = &B01011011


    Sollten die nicht gleich sein oder überseh ich da was?


  • Ist das eine 2??


    Dim(20) = &B00000110
    Dim(21) = &B01011011
    Dim(22) = &B01011011

    Dass: &B01011011 ist eine 2
    Dass: &B00000110 ist eine 1


    Die Variablen sind alle um eine Stelle verschoben, da es keine Variable 0 gibt, der Zähler aber bei 0 beginnen soll. Ein Reset ist nicht notwendig, für einen Reset wir einfach kurz die Versorgungsspannung getrennt.


    Einen AtMega32 wollte ich verwenden, da ich den noch hier liegen habe.



    Gruß Matze1992

    :led: 0815 - Mit der Lizenz zum Löten :led:
    Wer Rechtschreibfehler findet darf sie behalten oder in Ebay verkaufen.

  • Das geht einfacher...
    - Definieren die gewünschten Zeichen von 0-9 so wie bisher - am besten als CONSTANT, ist sauberer
    - Die Bitmuster sind für beide Ports die selben, also braucht man nix über 9
    - Dann eine Routine, die die Werte entsprechend verteilt. Also z.B. Wert in String konvertieren, dann die letzte Stelle nehmen und wieder in Byte und je nach Wert Variable zuweisen. In den Port schreiben, dann das selbe nochmal für die Zehnerstelle.
    Schau die mal die Funktion VAL in Bascom an.

  • Hallo Stefan,


    meinst du dass so?



    Unter Val und String kann ich mir leider nichts vorstellen, auch google konnte mir da nicht so richtig helfen. Kannst du dass bitte nochmal für einen Anfänger erklären?
    Danke


    Gruß Matze1992

    :led: 0815 - Mit der Lizenz zum Löten :led:
    Wer Rechtschreibfehler findet darf sie behalten oder in Ebay verkaufen.

  • Ich würd das "Charset" eher über Data-Felder anlegen, aber das ist wohl Geschmackssache.


    Aber was anderes: wie bestromst du die Anzeigen? Was für Vorwiderstände? Die Zahl 88 dürfte mit 14 aktives Segmenten den AVR ganz schön stressen, die Doppel-Null mit 12 aktives Segmenten ist auch nicht besser. Max. 200mA in Summe über alle Portpins (siehe Datenblatt Seite 288, Fußnote 3,1).

  • Probier das mal.. sollte gehen...




    Elegant ist anders, aber du sollst es ja verstehen :D
    Noch machen musst du:
    - Taster auf INT legen
    - Entprellung des Tasters
    - Anzeige nur dann ändern, wenn der Taster auch wirklich gedrückt wurde (per Flag und Display-Refresh in Sub-Programm packen)
    - Überlaufhandling - also wenn der Counter über 99 kommt. An sich egal, weil ja dann wieder mit 00 angefangen wird, aber nach 255 kommt ja direkt wieder 0, weil das Byte voll ist! Daher prüfen
    - Weitere Funktionen ausdenken :thumbup:


    Gute Lektüre für Bascom-Einsteiger:
    http://www.qsl.net/pa3ckr/


    Besser als das Bascom-Handbuch...