Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Probleme mit Timer_T0Time bei Mega32 Kategorie: Programmierung Basic (von Andreas - 19.03.2008 14:34)
Als Antwort auf Re: Probleme mit Timer_T0Time bei Mega32 von PeterS - 19.03.2008 13:58
Ich nutze:
C-Control Pro Mega32, C-Control Pro Mega128, eigenes Board
Danke fĂĽr die schnelle Antwort
Im Interrupt soll nur ein Zähler laufen.
Mein Ziel war alle  1ms ein ADC-Wert in eine Variable zu speichern.
Welche Möglichkeit gibt es sonst um 1ms-Pausen zu zu relisieren.
Den ' Timer_T0Time ' kann man bei der Mega32 anscheinend nicht gebrauchen, da die 8bit-Parameter
keinen Einflu� auf die Zählerstände nach eine Sekunde haben.
Wozu gibt es den Befehl, wenn er anscheinend nicht funktioniert.

GruĂ? Andreas


> > Hallo,
> > kann mir einer helfen. Ich wollte ĂĽber die ' Timer_T0Time ' Funktion ein 1Millisekunden-Interrupt erstellen.
> > Wie man im unten stehenden Programm sieht liefern die Mega32 und Mega128 unterschiedliche Ergebnisse.
> Also ich kann bestätigen, das der Mega32 Bytecode-Interpreter langsamer ist als der Mega128
> Bytecode-Interpreter. Dies liegt daran, das sowenig Platz auf dem Mega32 ist, dort wurde der
> Interpreter auf Platz optimiert, beim Mega128 auf Geschwindigkeit.
>
> Beide Module sind aber eigentlich zu langsam, um jede Milisekunde umfangreiche Befehle auszufĂĽhren.
> Ich wĂĽrde bei einem 1ms Interrupt die Interruptroutine auf ca. 10 Befehle begrenzen, damit noch
> etwas Rechenleistung fĂĽr das Hauptprogramm ĂĽbrig bleibt.
>
> Gruss Peter
>
> > Da ich mit der Mega32 arbeite und die Mega128 nur testweise habe, bräuchte ich eine Lösung.
> >
> > Mache ich etwas verkehrt oder hat der Mega32-Interpreter einen Fehler.
> >
> > Besten Dank fĂĽr die Hilfe
> >
> > Andreas
> >
> > Hier das Programm:
> >
> >
> >  'Definition von globalen Variablen und Adressen
> > Dim cnt1 As Byte                        ' Counter fĂĽr Interrupt
> > Dim cnt_10ms As Word                    ' Counter in 10ms Schritten
> > Dim cnt_1ms As Word                    ' Counter in 1ms Schritten
> > Dim Pause As Single'Word                       ' Pause in 10ms Schritten
> > Dim Sekunde, Minute, Stunde As Byte     ' fĂĽr eventuelle Uhr / Betriebsstundenzähler?
> > Dim i , y , z As Integer                ' globale Variablendeklaration
> >
> >
> >
> > Sub main()
> > ' Initialisierung
> >  ' !!!! ----- USB-Kommunikation abschalten    ---- !!!!!
> >  SPI_Disable()
> >  'Pullup-Widerstände von Port A Abschalten
> >  Port_DataDir(0,0)
> >  Port_Write(0,0)
> >  ' -------------------------------------------------
> >
> > '                        MEGA32 -->'ms  --> Pause / cnt1  --> ms   / Pause ' MEGA128 --> ms   / Pause
> > 'Timer_T0Time(14,PS0_1024)  '500 -->    29 /   51  --> 1000 /   57                1000 / 1018
> > 'Timer_T0Time(57,PS0_256)   '500 -->   112 /   51  --> 1000 /  222                1000 / 1000
> > 'Timer_T0Time(230,PS0_64)   '500 -->   449 /   51  --> 1000 /  890                1000 /  990
> > Irq_SetVect(INT_TIM0COMP,INT_1ms)  ' Interrupt Service Routine definieren
> > Irq_SetVect(INT_TIM2COMP,INT_10ms)  ' Interrupt Service Routine definieren
> >
> >
> > 'Do While cnt1 <= 50
> > Do While Sekunde <=0
> > End While
> > Msg_WriteFloat (Pause)
> > Msg_WriteChar (32)
> > Msg_WriteInt (cnt1)
> > Msg_WriteChar (32)
> > Msg_WriteInt (Sekunde)
> > Msg_WriteChar (13)
> >
> >
> > End Sub
> > '---------------------------------------------
> > '---| ab hier folgen Subs und Funktionen |----
> > '---------------------------------------------
> > ' Interupt 10ms
> > Sub INT_10ms()
> >     Dim irqcnt As Integer
> >     RTC()                               ' Funktionsaufrauf: RTC
> >     irqcnt=Irq_GetCount(INT_TIM2COMP)   ' Interrupt Request Counter
> > End Sub
> >
> > ' Interupt 1ms
> > Sub INT_1ms()
> >     Dim irqcnt As Integer
> >     ms_1()                               ' Funktionsaufrauf: RTC
> >     irqcnt=Irq_GetCount(INT_TIM0COMP)   ' Interrupt Request Counter
> > End Sub
> >
> > Sub ms_1 ()
> >     Pause = Pause + 1
> > End Sub
> >
> > Sub RTC()
> >     cnt1 = cnt1 + 1                         ' 10ms Zähler erhöhen
> >
> >     If cnt1=100 Then
> > '        Display_Time()                  ' Funktionsaufruf: Display_Time
> >         Sekunde= Sekunde+1
> >         If Sekunde=60 Then
> >             Sekunde=0
> >             Minute= Minute+1
> >             If Minute=60 Then
> >                 Minute=0
> >                 Stunde= Stunde+1
> >                 If Stunde=24 Then
> >                     Stunde=0
> >                 End If
> >             End If
> >         End If
> >         cnt1=0
> >     End If
> > End Sub
> >


    Antwort schreiben


Antworten:

Re: Probleme mit Timer_T0Time bei Mega32 (von Sebastian - 19.03.2008 16:58)
    Re: Probleme mit Timer_T0Time bei Mega32 (von HW - 19.03.2008 17:01)