- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 1 von 1

Thema: Multiplexuhr mit Stundensignal (Lauflicht)

  1. #1

    Multiplexuhr mit Stundensignal (Lauflicht)

    Anzeige

    Praxistest und DIY Projekte
    Bongiorno!
    Ich bin relativ neu in der Microcontroller Welt. Ich habe schon einige Sachen mit CMOS gebaut, Uhren und Stoppuhren und so... Mein erstes AVR-Projekt ist eine Uhr mit 4 7-Segmentanzeigen, Atmega8, 1MHz Quarzoszillator und einem 5er Lauflicht, das zu jeder vollen Stunde ein paar Spielereien macht. Bei Tastendruck soll es laufend Spielereien machen, solange bis die Taste erneut gedrückt wird.
    Das Lauflicht befindet sich an Portb.0 - Portb.4. Dort sind LEDs mit Vorwiderstand gegen Masse...
    Der Taster, der das auslöst ist gegen + und mit Kondensator entprellt...
    Die Uhr ist modifiziert von http://blackstrom.derschwarz.de/avr/avr_uhr/index.shtml, Wolfgang Schwarz und funktioniert ganz ausgezeichnet!
    Sie benutzt Timer0 für Multiplexing und Timer1 für die Sekundenimpulse der Uhr. Timer2 habe ich für das Lauflicht verwendet. Er steht vor der Hauptschleife:
    Code:
    Config Timer2 = Counter , Prescale = 1024 'Timer 2 wird für das Lauflicht verwendet
    Enable Timer2 'Prescale 1024 bedeutet, der 1MHz Takt wird durch 1024 geteilt
    On Timer2 Isr_von_timer2
    
    
    'In die Hauptschleife habe ich das hier geschrieben:
    
    Do
    If Zl_minute = 0 And Zh_minute = 0 And Zl_sekunde = 0 And Zh_sekunde = 0 Then 'Lauflicht zu jeder vollen Stunde
    A = 1 'Springt in die Lauflicht Routine
    T = 0 'Timer für Lauflicht auf 0
    I = Rnd(12) 'Erzeugt Zufallszahl zwischen 1 und 11 für verschiedene Programme
    End If
    
    und
    
    If Pinb.5 = 1 Then 'Wenn Taster, der Pinb.5 gegen +5V schaltet gedrückt wird...
    'dieser Taster ist wie auf dem Atmel Evaluation Board von Pollin
    'mit 100nF entprellt und mit 33KOhm gegen Massen
    'Toggle Taster, damit will ich eigentlich arbeiten 'Toggle Taster würde die Variable Taster (Bit) von 1 auf 0 oder von 0 auf 1 setzen
    T = 0 'Timer für Lauflicht 0
    A = 1 'Springt runter in Zeile 340
    I = Rnd(12) 'Erzeugt Zufallszahl zwischen 1 und 11 für verschiedene Programme
    Bitwait Pinb.5 , Reset 'Bitwait war im Testtool vom Atmel Evaluation Board
    End If
    
    Loop
    End
    
    'Weiter unten steht dann
    
    Isr_von_timer2: 'ISR von Timer1
    Timer2 = 3000 'Timer1 soll von 3000 wegzählen
    Incr T 'Die Variable T wird dann jede halbe Sekunde oder so erhöht
    
    If A = 1 Then
    
    If I = 1 Then 'ähnlich wie 'Knightrider'
    Select Case T 'auf T bezogen
    Case 1 : Portb = &B00000001 'ab T = 1; schalte die Ports für das Lauflicht so
    Case 3 : Portb = &B00000011 'ab T = 3; schalte die Ports dann so...
    Case 5 : Portb = &B00000110
    Case 7 : Portb = &B00001100
    Case 9 : Portb = &B00011000 'Portb = &B00011000
    Case 11 : Portb = &B00010000 'Portb. 43210
    Case 13 : Portb = &B00011000
    Case 15 : Portb = &B00001100
    Case 17 : Portb = &B00000110
    Case 19 : Portb = &B00000011
    Case 21 : Portb = &B00000001
    Case 23 : Portb = &B00000011
    Case 25 : Portb = &B00000110
    Case 27 : Portb = &B00001100
    Case 29 : Portb = &B00011000
    Case 31 : Portb = &B00010000
    Case 33 : Portb = &B00011000
    Case 35 : Portb = &B00001100
    Case 37 : Portb = &B00000110
    Case 39 : Portb = &B00000011
    Case 41 : Portb = &B00000001
    Case 43 : Portb = &B00000011
    Case 45 : Portb = &B00000110
    Case 47 : Portb = &B00001100
    Case 49 : Portb = &B00011000
    Case 51 : Portb = &B00010000
    Case 53 : Portb = &B00011000
    Case 55 : Portb = &B00001100
    Case 57 : Portb = &B00000110
    Case 59 : Portb = &B00000011
    Case 61 : Portb = &B00000001
    Case 63 : Portb = &B00000000
    End Select
    End If
    
    If I = 2 Then
    'Hier und weiter unten stehen noch 10 Spielereien, mit I zugeordnet
    End If
    
    End If
    
    Return
    So, das funktioniert so lala. Das Problem ist, dass es, wenn
    If Zl_minute = 0 And Zh_minute = 0 And Zl_sekunde = 0 And Zh_sekunde = 0 Then
    eine Sekunde lang flackert, es löst dann dauernd Zufallszahlen aus?
    Ausserdem weiß ich nicht, wie der Sprung funktioniert, oder warum!? A ist eine Variable, die nie mehr auf 0 gesetzt wird, trotzdem löst es bei jedem Tastendruck sauber und zu jeder vollen Stunde nicht ganz so sauber aus. Ich bin schon die letzten Nächte am Knobeln und lesen, aber das ist bis jetzt meine beste Lösung! Wie könnte ich das sauber hinbekommen?
    Angehängte Dateien Angehängte Dateien
    Geändert von BASTIUniversal (05.04.2012 um 11:44 Uhr) Grund: [code] eingefügt

Ähnliche Themen

  1. Lauflicht
    Von c07 im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 15.04.2010, 20:33
  2. [ERLEDIGT] 300 LED Lauflicht
    Von Koksnuss im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 17
    Letzter Beitrag: 17.11.2007, 19:53
  3. Lauflicht am Pc?
    Von Römer im Forum Software, Algorithmen und KI
    Antworten: 10
    Letzter Beitrag: 15.04.2007, 14:56
  4. Lauflicht
    Von Hallomann im Forum Elektronik
    Antworten: 44
    Letzter Beitrag: 04.02.2007, 17:11
  5. LED lauflicht!
    Von Exodus im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 19.06.2006, 12:15

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests