-         

Ergebnis 1 bis 3 von 3

Thema: Dimmer mit mehreren Kanälen - flackert im Sekundentakt

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627

    Dimmer mit mehreren Kanälen - flackert im Sekundentakt

    Anzeige

    Hallo,
    bisher habe ich nur Dimmer für eine Lampe gefunden und mit dem Wait-Befehl programmiert.

    Ich benötige aber 16 Kanäle, die ich unabhängig von einander regeln kann.

    Das Programm ist nun fertig, aber manchmal blinkt die Lampe(habe erst einen Ausgang drann) d.h. mal wird sie heller als der Sollwert und mal dunkler als der Sollwert - aber nur so als auf blitzen(fast im Sekundentakt). Wenn ich den Timer0 deaktiviere, dann ist das blinken weg!
    Zurzeit nutze ich den Timer nur für Ausgaben - aber woran liegt das?

    Tobias

    Code:
    'Empfänger für 16 Kanal Dimmer
    
    ' V1:
    '-
    
    '-------------------------------------------------------------------------------
    'Konfiguration µC:
    $regfile = "m644def.dat"                                    'AT-Mega32
    $crystal = 18432000                                         'Quarz:
    $baud = 57600                                               '76800       '38400     'Baudrate definieren
    $hwstack = 64                                               ' default use 32 for the hardware stack
    $swstack = 64                                               ' default use 10 for the SW stack
    $framesize = 64
    
    '-------------------------------------------------------------------------------
    'Ein- Ausgänge:
    
    
    
    Ddra = &B11111111                                           '1 Ausgang, 0 Eingang
    Ddrb = &B00000000                                           '1 Ausgang, 0 Eingang
    Ddrc = &B11111111                                           '1 Ausgang, 0 Eingang => Pin PC7-0 als Ausgang
    Ddrd = &B00000000                                           '1 Ausgang, 0 Eingang
    
    'PullUP
    Portd.2 = 1                                                 'Eingang für Nulldurchgangerkennung
    
    
    
    '-------------------------------------------------------------------------------
    '8Bit Timer:
    Config Timer0 = Timer , Prescale = 1024
    On Timer0 Timer0_irq
    Const Timervorgabe0 = 31                                    '80x/sec Bei 18 , 432Mhz
    Timer0 = Timervorgabe0
    Enable Timer0
    Enable Interrupts
    
    '16Bit Timer:
    Config Timer1 = Timer , Prescale = 1024
    On Timer1 Timer1_irq
    Const Timervorgabe1 = 0
    Timer1 = Timervorgabe1
    Enable Timer1
    Enable Interrupts
    
    Config Int0 = Rising                                        ' INT0 so konfiguriert das Trigger bei steigender  Flanke
    On Int0 Dimmer_null_irq                                     ' Springe zur Interrupt-Routine Dimmer_null_irq
    Enable Int0                                                 ' Interrupt0 freigeben
    Enable Interrupts
    '-------------------------------------------------------------------------------
    'Variablen:
    '-------------------------------------------------------------------------------
    
    Dim X As Byte
    Dim X1 As Byte
    Dim T0 As Byte                                              'Für Timer0
    Dim Null As Byte
    'Config Watchdog = 1024                                      '2048 'Timeout = 2 Sekunden
    'Start Watchdog
    '-------------------------------------------------------------------------------
    
    
    '===============================================================================
    '===============================================================================
    'Hauptprogramm Do...Loop
    '===============================================================================
    '===============================================================================
    Print "Programmstart"
    
    
    Do
    X = 50                                                      'Helligkeitswert (von 0 - 160)
    X1 = 160 - X
    
    
    '_________________________________________________
    'DIMMEN:
    If Timer1 > X1 Then
    Set Porta.0
    Else
    Reset Porta.0
    End If
    
    
    'timer1 = 160 max!!!
    
    
    
    Loop
    
    End
    
    
    
    '###############################################################################
    '###############################################################################
    'Interrupt Sub Routine - I.S.R
    '###############################################################################
    '###############################################################################
    
    Dimmer_null_irq:                                            'Nulldurchgangserkennung
    Timer1 = 0
    Incr Null
    Return
    
    
    
    '###############################################################################
    Timer0_irq:
    Timer0 = Timervorgabe0
    Incr T0
    
    If T0 = 80 Then                                             'jede Sekunde
    T0 = 0
    Print "Timer0: " ; Timer0 ; " Null: " ; Null
    Null = 0
    End If
    
    Return
    
    '###############################################################################
    Timer1_irq:
    Print "FEHLER Timer1 ist übergelaufen!!!"
    Return
    ...

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    In eine ISR gehört kein Print. Das kann länger dauern, als die Zeit zwischen 2 IRQ. Da wird am besten nur eine Statusvariable gesetzt und diese wird in der Hauptschleife oder einer davon aufgerufenen Sub abgefragt und dementsprechend gehandelt.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627
    ja danke - der Printbefehl!
    ...

Ähnliche Themen

  1. Wie erzeuge ich eine 1 Sekundentakt mit dem AtTiny2323?
    Von LotharK im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 28.10.2007, 17:49
  2. Genauer Sekundentakt (mit Quarz) - welcher Attiny geeignet ?
    Von Andree-HB im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 10
    Letzter Beitrag: 22.08.2007, 21:02
  3. Exakter Sekundentakt mit wenig Aufwand
    Von LotharK im Forum Assembler-Programmierung
    Antworten: 11
    Letzter Beitrag: 05.03.2007, 11:54
  4. ne555 sekundentakt???
    Von xbgamer im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 06.02.2007, 21:21
  5. [ERLEDIGT] A/D-Wandler mit mehreren Kanälen an USB
    Von im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 10
    Letzter Beitrag: 20.12.2004, 15:13

Berechtigungen

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