- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 12 von 12

Thema: Probleme mit Mega16 und STK500

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2008
    Beiträge
    24
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,
    also die Idee mit dem Wikibeitrag fände ich sehr gut, ich denke das viele Anfänger immer über die gleichen Probleme stolpern.
    Ich habe zwar ein Buch 'Programmieren der AVR - Risc mit Bascom-AVR' von Claus Kühnel, das ist auch nicht schlecht aber solche Probleme und Fragen werden darin überhaupt nicht behandelt.
    Vieleicht kennst Du ein Buch das speziell die Mega8,16 und 32 behandelt.
    Mit dem Datasheet in englischer Sprache komme ich oft nicht zurecht.
    Hier mal den Code, ich habe dabei noch das LCD Display getestet. Es geht mir aber hauptsächlich um die Timer0 generierte Zeit.
    Den Wert von Variable A habe ich aus dem Buch von Herrn Kühnel.
    T=256*prescaler/Fosc
    rein rechnerisch komme ich auf einen Wert 1/Interrupt = 122, mit diesem wert zähle ich dann bis auf eine Minute.
    Ich mußte den Wert aber auf 126 setzen damit ich annähernd auf eine Sekunde komme.

    Code:
    $regfile = "M16def.dat"                                     ' specify the used micro
    '$crystal = 8000000                                          ' used crystal frequency
    $baud = 9200                                                ' use baud rate
    $hwstack = 32                                               ' default use 32 for the hardware stack
    $swstack = 10                                               ' default use 10 for the SW stack
    $framesize = 40                                             ' default use 40 for the frame space
    '$sim
    
    
    
    
    Const On = 1
    Const Off = 0
    
    Dim A As Word
    Dim C As Word
    
    Config Portd = Input
    Portd = 255
    Config Portc = Output
    Portc = 255
    
    Config Timer0 = Timer , Prescale = 256
    Config Lcd = 20 * 4
    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.0 , Rs = Portb.1
    Config Lcdbus = 4
    Config Debounce = 50
    Taster Alias Portd.0
    Anzeige Alias Portb.2
    A = 0
    C = 0
    
    
    On Timer0 Timer0_isr
    
    Enable Timer0
    Enable Interrupts
    
    
    
    Do
    
       If C = 60 Then
       Toggle Portc.1
       End If
       Wait 1
       Debounce Pind.0 , 0 , Anzeige_aus , Sub
       Cls
       Lcd "Guten Tag"
       Locate 2 , 1
       Lcd C
       Toggle Portc.0
       Wait 1
    Loop
    
    
    Anzeige_aus:
      If Anzeige = On Then
       Anzeige = Off
       Else
       Anzeige = On
       End If
    Return
    
    
    Timer0_isr:
       Incr A
       If A = 126 Then
       Incr C
       End If
       If A > 126 Then
       A = 0
       End If
       If C > 59 Then
       C = 0
       End If
    Return
    Also nach der Formel müßte alle 8,192ms ein Interrupt ausgelöst werden, demnach müßte ich nach 122 interrupst eine Sekunde haben.
    Vieleicht mache ich da auch einen gedanklichen Fehler, aber der es so aus als wenn der Controller zu schnell liefe. Deshalb habe ich dann auf 126 geändert, in diesem fall habe ich eine Abweichung von 0,5 Sek. Wenn ich nun aber hochrechne auf einige Stunden, dann ist die Abweichung natürlich inakzeptabel.
    Gruß Harald

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.05.2005
    Alter
    32
    Beiträge
    601
    Hi,

    für die Timerberechnung gibt es im Downloadbereich das Programm rnavr,
    mit dem kann man die Timer sehr gut berechnen.
    Grüße Furtion

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

LiFePO4 Speicher Test