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 Sebastian, http://www.armee-forum.de - 19.03.2008 16:58)
Als Antwort auf Re: Probleme mit Timer_T0Time bei Mega32 von Andreas - 19.03.2008 14:34
Ich nutze:
CC-Pro 128 Application Board
Hi,

Warum macht du das nicht mit AbsDelay()?

Sebastian


> 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
> > >

Meine Seite: http://www.armee-forum.de


    Antwort schreiben


Antworten:

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