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

Re: Timer0 Kategorie: Programmierung Basic (von Jan - 9.10.2011 14:32)
Als Antwort auf Timer0 von Newbie - 5.10.2011 15:23
Ich nutze:
C-Control Pro Mega128, CC-Pro 128 Application Board
> Hallo alle miteinander.
> Vielleicht könnt Ihr mir weiter helfen.
> Ich befasse mich seit kurzem mit der Programmierung der C-Control PRO Mini-Station.
> Nun habe ich ein kleines Programm geschrieben, doch es funktioniert leider nicht.
>
> Beschreibung des Programms:
> Wenn der Input1 der C-Control Pro Mini-Station auf Masse gezogen wird (0VDC), soll ein Timer
> gestartet werden.
> Nach Ablauf einer vorgegebenen Zeit, soll eine globale Variable auf "true" gesetzt werden.
> Wenn diese Variable "true" ist, soll der Output2 gesetzt werden. (LED am Ouput2 soll leuchten)
> Das Programm ist in basic geschrieben.
>
> Nun mein Problem:
> Er setzt, wenn der Eingang auf Masse gezogen ist, den Ausgang nicht.
> Somit leuchtet auch die LED nicht!
>
> Kann mir jemand sagen was an diesem Programm falsch ist.
>
> Schon mal vielen Dank im Vorraus!
>
>
> Quellcode:
>
> '*******************************************************************************
> 'Das Programm soll wenn am PortD.3 0VDC anliegen einen Timer starten.
> 'Nach Ablauf dieses Timers soll der PortC.3 gesetzt werden (LED leuchtet).
> '*******************************************************************************
>
>
> 'Port-Eingänge mit Nämen verweisen
> #define Input 27                    'Input1 PortD.3
>
> 'Port-Ausgänge mit Nämen verweisen
> #define LED 19                      'Output2 PortC.3
>
> #define PORT_ON 1
> #define PORT_OFF 0
>
> Dim VarTimer As Byte                 'Globale Variable
>
> 'Interrupt Timer
> Sub Timer0_ISR()
>     Dim irqcnt As Integer
>     VarTimer = 1
>     Timer_T0Stop()                   'Timer0 anhalten
>     irqcnt=Irq_GetCount(INT_TIM0COMP)
> End Sub
>
>
>
> Sub main()
>
> 'Port als Ausgänge deklarieren
> Port_DataDirBit(LED,PORT_OUT)        'PortC.3 als Ausgang (PORT_OUT= 1)
>
> 'Port als Eingänge deklarieren
> Port_DataDirBit(Input,PORT_IN)       'PortD.3 ist Eingang   (PORT_IN= 0)
>
> 'Pull-up Widerstand des Eingangs aktivieren
> Port_WriteBit(Input,1)
>
> 'Interrupt Service Routine definieren
> Irq_SetVect(INT_TIM0COMP,Timer0_ISR)
>
>
>
> 'Startvorgang
> If Port_ReadBit(Input)=0  Then                  'Abfrage ob Eingang gesetzt ist
>     Timer_T0Time(100,PS0_1024)                  'Zeit festlegen und Timer0 starten (100x69,44 µs)
> End If
>
>
> If VarTimer=1 Then
>     Port_WriteBit(LED, PORT_ON)
> End If
>
> End Sub

Hast Du das Programm schon mal mit angelegter Masse an Input1 gestartet? Wenn es dann 1x
funktioniert würde ich das Hauptprogramm als Endlosschleife (Do While True ... End While) laufen
lassen, da das Programm sonst nicht auf die Eingabe an Input1 warten kann; es ist schon längst zu
Ende bevor Du gegen Masse schalten kannst.

Gruß, Jan


    Antwort schreiben


Antworten:

Re: Timer0 (von Newbie - 12.10.2011 14:24)