SD-75M
01.02.2012, 16:51
Hallo zusammen,
Habe mich gerade in diesem tollen Forum angemeldet, mit der Hoffnung das man hier nich wegen Bascom Programmierung nieder gemacht wird....
Zu meinem ersten Problem:
Wie ich in vielen Beispielen hier gesehen habe, kann man einen externen Interrupt (z.B. INT0) dafür verwenden das Startbit bei einer Software Uart zu dedektieren um diese UART Nachricht in der ISR abzurufen.
Aber leider tut sich da nicht viel... Zu der Seriellen Verbindung ist noch zu sagen, es müssen 4 Datenbytes (ohne CR oder LF oder was auch immer) empfangen werden. Das erste Byte ist immer grösser als &H80!
Hier mal der Code, der eigentlich nicht viel anders ist als der von den Beispielen:
$regfile = "attiny84.dat" 'Prozessor
$crystal = 8000000 'Takt in Hz
$hwstack = 20
$swstack = 20
$framesize = 20
Ddrb = &H03
Portb = &H0F
Ddra = &HFF 'PortA = Ausgang
Porta = &HFF
Open "comb.2:16666,8,n,1" For Input As #1 'Soft Uart Input Pin RX
'Open "Comb.0:16666,8,n,1" For Output As #2 'Soft Uart Output Pin TX
'PortB.1 = LED Statusanzeige
Config Int0 = Falling
On Int0 Int0_isr
Enable Int0
Dim Tempa As Byte
Dim Tempb As Byte
Dim Tempc As Byte
Dim Rx_array(4) As Byte
Dim Array_rx_reset As String * 3 At Rx_array(1) Overlay
Enable Interrupts
'HAuptschleife
Do
'Inputbin #1 , Rx_array(1) , 4 'warten bis 4 Datenbytes empfangen
'Hier Nachricht auswerten:
If Rx_array(1) >= &H80 then
IF Rx_Array(2) = &H01 then
Portb.1 = 0
Elseif Rx_array(2) = &H02 then
Portb.1 = 1
Else
Array_rx_reset = String(3 , 0)
End if
Waitms 20
Toggle Porta.0
Loop
Int0_isr:
Inputbin #1 , Rx_array(1) , 4 'warten bis 4 Datenbytes empfangen
Return
Das komische an der ganze sache ist, wenn ich die 4-Byte Nachricht in der "Maine" Schleife Polle, funktioniert es tadellos, aber so bald ich das Inputbin über die ISR Auswerten möchte, geht das nicht mehr. Die Fusebits im Attiny stimmen, also kein Clock Divide o.ä. als Tacktquelle benutze ich den internen RC-Oscilator, aber mit diesem funktioniert die Soft Uart sehr gut, da ich wie schon geschrieben, in der AHuptschleife die Message problemlos pollen kann...
Weiss da einer Rat, was das noch sein könnte? Vielen Dank schon im vorraus.
Gruss René
Habe mich gerade in diesem tollen Forum angemeldet, mit der Hoffnung das man hier nich wegen Bascom Programmierung nieder gemacht wird....
Zu meinem ersten Problem:
Wie ich in vielen Beispielen hier gesehen habe, kann man einen externen Interrupt (z.B. INT0) dafür verwenden das Startbit bei einer Software Uart zu dedektieren um diese UART Nachricht in der ISR abzurufen.
Aber leider tut sich da nicht viel... Zu der Seriellen Verbindung ist noch zu sagen, es müssen 4 Datenbytes (ohne CR oder LF oder was auch immer) empfangen werden. Das erste Byte ist immer grösser als &H80!
Hier mal der Code, der eigentlich nicht viel anders ist als der von den Beispielen:
$regfile = "attiny84.dat" 'Prozessor
$crystal = 8000000 'Takt in Hz
$hwstack = 20
$swstack = 20
$framesize = 20
Ddrb = &H03
Portb = &H0F
Ddra = &HFF 'PortA = Ausgang
Porta = &HFF
Open "comb.2:16666,8,n,1" For Input As #1 'Soft Uart Input Pin RX
'Open "Comb.0:16666,8,n,1" For Output As #2 'Soft Uart Output Pin TX
'PortB.1 = LED Statusanzeige
Config Int0 = Falling
On Int0 Int0_isr
Enable Int0
Dim Tempa As Byte
Dim Tempb As Byte
Dim Tempc As Byte
Dim Rx_array(4) As Byte
Dim Array_rx_reset As String * 3 At Rx_array(1) Overlay
Enable Interrupts
'HAuptschleife
Do
'Inputbin #1 , Rx_array(1) , 4 'warten bis 4 Datenbytes empfangen
'Hier Nachricht auswerten:
If Rx_array(1) >= &H80 then
IF Rx_Array(2) = &H01 then
Portb.1 = 0
Elseif Rx_array(2) = &H02 then
Portb.1 = 1
Else
Array_rx_reset = String(3 , 0)
End if
Waitms 20
Toggle Porta.0
Loop
Int0_isr:
Inputbin #1 , Rx_array(1) , 4 'warten bis 4 Datenbytes empfangen
Return
Das komische an der ganze sache ist, wenn ich die 4-Byte Nachricht in der "Maine" Schleife Polle, funktioniert es tadellos, aber so bald ich das Inputbin über die ISR Auswerten möchte, geht das nicht mehr. Die Fusebits im Attiny stimmen, also kein Clock Divide o.ä. als Tacktquelle benutze ich den internen RC-Oscilator, aber mit diesem funktioniert die Soft Uart sehr gut, da ich wie schon geschrieben, in der AHuptschleife die Message problemlos pollen kann...
Weiss da einer Rat, was das noch sein könnte? Vielen Dank schon im vorraus.
Gruss René