ci sono delle cose che in queste ore non riesco a spiegarmi per cui chiedo il vostro aiuto.
Stò lavorando con Bascom AVR 2.0.7.7 + arduino 2560.
Se provo a scaricare in arduino questo semplice codice:
- Code: Select all
'-------------------------------------------------------------------------------
'Arduino 2560R3
'
'
'-------------------------------------------------------------------------------
$regfile = "m2560def.dat" ' used micro
$crystal = 16000000 ' used xtal
$hwstack = 40
$swstack = 40
$framesize = 40
'------------------------------------------------------------------------------
Dim A As Byte
Dim B As Byte
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Config Lcd = 20 * 4
Cursor Off Noblink
Cls 'clear the LCD display
Lcd "Attendere Prego!!!"
End
Ricevo questo errore: https://dl.dropboxusercontent.com/u/15219757/errore%20bascom.jpg
Se al posto di Lcd "Attendere Prego!!!" ci metto Lcd "Attendere Prego!!" cioè con solo 2 punti esclamativi tutto torna ok. Mah!
Secondo problema, secondo me dovuto ad un errato mio approccio al problema:
- Code: Select all
'-------------------------------------------------------------------------------
'Arduino 2560R3
'
'
'-------------------------------------------------------------------------------
$regfile = "m2560def.dat" ' used micro
$crystal = 16000000 ' used xtal
$hwstack = 40
$swstack = 40
$framesize = 40
'-------------------------------------------------------------------------------
'Uso la PortE output
'Config Porte = Output
'Oppure il singolo bit (in questo caso il pin 3 della Porta E come Uscita)
'1 = Uscita; 0 = Ingresso
Ddrc.0 = 1
Ddrc.1 = 1 'settiamo PC1 come uscita e lo usiamo come TX enable della 485 (36)
Ddre.5 = 1 'LED dello Shield RS485
Ddre.3 = 0 'Pin configurato come ingresso
Led_shield Alias Porte.5
Pls_shiled Alias Pine.3
Tx_enable Alias Portc.1
Config Com2 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
'try the second hardware UART
Open "Com2:" For Binary As #2
Config Print1 = Portc.1 , Mode = Set
' 33 32 31 30 34 35
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Config Lcd = 20 * 4
'create an array named a, with 7 elements (1 to 7)
Dim Ric_idcard(7) As Byte
Dim Receive_idcard(7) As Byte
Dim 100ms As Byte
Dim 200ms As Byte
Dim 1sec As Byte
Ric_idcard(1) = &H55
Ric_idcard(2) = &H3C
Ric_idcard(3) = &HAA
Ric_idcard(4) = &H00
Ric_idcard(5) = &H00
Ric_idcard(6) = &H00
Ric_idcard(7) = &HCA
'Configute the timer to use the clock divided by 1024
Config Timer0 = Timer , Prescale = 1024
'T = 256* precaler/fosc =256*1024/16000000 = 16,384 mS
'quindi sifnifica che ogni 16,384mS ci sarà un overflow
'Define the ISR handler (Interrupt Service Routine)
On Ovf0 Tim0_isr
'you may also use TIMER0 for OVF0, it is the same
Enable Timer0 ' enable the timer interrupt
Enable Interrupts
'//////////////////////////// INIZIO PROGRAMMA ////////////////////////////////////////
'GET_DLOGIC_CARD_TYPE (0x3C)
'CMD 55 3C AA 00 00 00 CA
'RSP DE 3C ED 00 21 00 35 (OK)
'ERR EC 08 CE 00 00 00 31
'display this at the top line
Cursor Off Noblink
Cls 'clear the LCD display
Lcd "Attendere Prego!"
Wait 1
Dim Contatore As Long
Do
Contatore = Contatore + 1
If Contatore >= 500000 Then
Cls
Lcd "Stai Attento"
Contatore = 0
End If
If Pls_shiled = 1 Then
Set Tx_enable
Led_shield = 1
Print #2 , "www.delucagiovanni.com"
Print
Print #2 , "Suibaf"
Reset Tx_enable
Else
Led_shield = 0
End If
Loop
'the following code is executed when the timer rolls over
Tim0_isr:
200ms = 200ms + 1
If 200ms >= 12 Then '200:16,384 = 12,2
Printbin #2 , Ric_idcard(1) ; 7
200ms = 0
End If
100ms = 100ms + 1
If 100ms >= 20 Then
Inputbin #2 , Receive_idcard(1) ; 7
100ms = 0
End If
1sec = 1sec + 1
If 1sec >= 61 Then
Cls
Lcd "Fabio" ' Receive_idcard(1) ; Receive_idcard(2) ; Receive_idcard(3) ; Receive_idcard(4) ; Receive_idcard(5) ; Receive_idcard(6) ; Receive_idcard(7)
1sec = 0
End If
Return
End
Questo semplice programmino si blocca alle prime righe con Lcd "Attendere Prego!" e non và più avanti. Se invece nell'interrupt Tim0_isr tolgo il secondo IF dove faccio l' Inputbin "tutto" torna a funzionare. Siccome ho bisogno di scrivere(e funziona) e leggere(e non funziona) con la seriale avevo pensato appunto a inputbin. Potete suggerirmi qualcosa? Grazie in anticipo.
Fabio