Hallo Forum,
Ich möchte über einen Atmega8 3,686 Mhz getaktet.
Den Portd.3 alle 25ms abfragen ob dieser Port auf Masse liegt.
Dieses soll genau 10 Sekunden dauern.
Dann müsste ich ja 400 Werte bekommen, das ist nicht der Fall.
Ich bekomme mal 307,317,323,... Werte heraus nie die 400.
Kann mir jemand helfen welche Werte falsch sind.Code:$regfile = "m8def.dat" $crystal = 3686400 $baud = 9600 'Baudrate der UART: 9600 Baud Config Timer1 = Timer , Prescale = 64 On Timer1 Timer_irq Const Timervorgabe = 7936 ' Const 7936 Ddrd = &B00000000 Ddrc = &B11111111 Portd = &B11111111 Dim Sekunden As Byte Dim P3 As Byte Dim P4 As Byte Dim A As Byte Dim T0 As Long Dim T1 As Long Dim E1 As Long Declare Sub Ledon Declare Sub Main Declare Sub Abfragen Declare Sub Ende Declare Sub Zler1 Enable Timer1 Enable Interrupts Main: '---------------------------------------------------------- '######## einschalten Portd.2 #################### '---------------------------------------------------------- Do Debounce Pind.2 , 0 , Abfragen , Sub 'Entprellt Loop '---------------------------------------------------------- '######## Abfrage des Portd.3 ################### '---------------------------------------------------------- Abfragen: Portc.3 = 1 A = 0 Do Zler1: Waitms 25 P3 = Pind.3 If P3 = 0 Then Portc.1 = 1 'Led An ' Portc.2 = 1 ' Summer an Portc.2 an A = A + 1 Print " A " ; A If A = 8 Then Goto Ledon End If Goto Zler1 Else Portc.1 = 0 'Led Aus ' Portc.2 = 0 ' Summer an Portc.2 aus A = 0 End If Loop '---------------------------------------------------------- '############ Led und Summer ############################# '---------------------------------------------------------- Ledon: T0 = 0 T1 = 0 Print "S" 'Senden ein S über RS232 Sekunden = 0 ' Sek auf 0 stellen dass die 10 S Do If Sekunden < 1 Then Portc.0 = 1 'Led zeigt 10 Sek.an ' Print " " ; Sekunden ' Kontrolle der Skunden Else Portc.0 = 0 'Led wird aus geschaltet ' Sekunden = 0 'Sekunden werden auf 0 gestzt Goto Ende End If 'Print Pind.4 ; " " ' Kontrolle des Portsd.4 P4 = Pind.3 If P4 = 1 Then ' Print "0" 'Senden ein 0 über RS232 Portc.1 = 0 ' Led aus Portc.1 Portc.2 = 0 ' Summer an Portc.2 aus T0 = T0 + 1 Print "0" ; " " ; T0 Else ' Print "1" 'Senden ein 1 über RS232 Portc.1 = 1 ' Led ein Portc.1 Portc.2 = 1 ' Summer an Portc.2 ein T1 = T1 + 1 Print "1" ; " " ; T1 End If Waitms 25 ' Abfrage alle 25 ms Loop '------------------------------------------------------------ '####### Ende ############### '------------------------------------------------------------ Ende: E1 = T0 + T1 Print "E" 'Senden ein E über RS232 Print " " Print " " Print " Treffer = " ; T1 Print " N.Treffer = " ; T0 Print " " Print " Gesammt = " ; E1 Print " " Print " Sekunde = " ; Sekunden Print " " Print " " T0 = 0 T1 = 0 Sekunden = 0 Portc.1 = 0 ' Led an Portc.1 aus Portc.2 = 0 ' Summer aus Portc.2 Portc.3 = 0 ' Laser einschalten Goto Main '------------------------------------------------------------- '########## Timer Skundenbasis ############################# '------------------------------------------------------------- Timer_irq: Timer1 = Timervorgabe Incr Sekunden Return End
mfg
Enterprise







Zitieren

Lesezeichen