Page 1 of 1

Gestione seriale su ATmega con Bascom

PostPosted: 07 Aug 2012, 07:44
by omega25
salve a tutti,
mi trovo a configurare la seriale di un atmega32 e sto incontrando qualche problemino.
dovrei gestire l'input della seriale tramite interrupt (penso sia la strada migliore), estrapolare il dato letto e splittarlo in alcuni campi ad es:

ES: campo1, campo2, campo3 -> indirizzo scheda, numero parametro, parametro, valore.

come faccio a configurare la seriale per leggere questi dati?

vi ringrazio tantissimo se potrete aiutarmi con qualche semplice esempio.

Re: Gestione seriale su ATmega con Bascom

PostPosted: 29 Aug 2012, 21:26
by omega25
ancora non ho risolto, c'è qualcuno che mi potrebbe aiutare?
non so come fare e avrei appunto questa esigenza.

grazie tante

Re: Gestione seriale su ATmega con Bascom

PostPosted: 29 Aug 2012, 21:44
by flz47655
Devi avere pazienza, vedrai che presto qualcuno ti risponde.
Io purtroppo non ho competenze con bascom, uso l'ide di Arduino

Ciao

Re: Gestione seriale su ATmega con Bascom

PostPosted: 30 Aug 2012, 12:39
by deluca
ES: campo1, campo2, campo3 -> indirizzo scheda, numero parametro, parametro, valore.

scusa ma non avevo fatto caso a questo topic e mi dispiace che nessuno ti abbia risposto.
gestire con il bascom la seriale di un avr è abbastanza semplice,
ti consiglio comunque di non usare l'interrupt della seriali URXC poichè unitamente alla istruzione INPUT bloccheresti l'esecuzione del programma durante questa istruzione.
allora quello che ti proporngo è di creare un buffer seriale, configurando opportunamente il SerialIn con Config, e saltare ad una funzione Serial0charmatch quando si digita ad esempio Return chr(13) o un altro carattere a tuo piacimento definito sul Config SerialIn.
Per quano riguarda l'estrazione di campi puoi usare l'istruzione SPLIT come di seguito riportato.

Code: Select all
'*******************************************************************************
'
'  Gestione seriale con buffer serial-input 20 byte - by G. De Luca
'  Uso di split per estrapolazione di campi
'
'*******************************************************************************
$sim                                                        'versione simulatore
$regfile = "m328def.dat"
$crystal = 16000000
$hwstack = 128
$swstack = 128
$framesize = 128
$baud = 57600

'-------------------------------------------------------------------------------
Config Serialin = Buffered , Size = 40 , Bytematch = 13

Dim Cmd As String * 40
Dim Arr(20) As String * 5
Dim Buf_full As Bit
Dim I As Byte
Dim Bt As Byte

Enable Interrupts
'-------------------------[ Main ]----------------------------------------------
Do

  If Buf_full = 1 Then
     Print Arr(1) ; " " ; Arr(2) ; " " ; Arr(3) ; " " ; Arr(4)
     Clear Serialin
     Reset Buf_full
  End If

Loop
End
'------------------------[ Gestione serial buffer ]-----------------------------
Serial0charmatch:
     Cmd = ""
     For I = 1 To _rs_bufcountr0
         Cmd = Cmd + Chr(_rs232inbuf0(i))
     Next
     Set Buf_full
     Bt = Split(cmd , Arr(1) , ",")
Return
'-------------------------------------------------------------------------------


Posso sapere la versione di Bascom che hai installato sul tu PC e se è Demo o Full?

Re: Gestione seriale su ATmega con Bascom

PostPosted: 31 Aug 2012, 22:06
by omega25
deluca
grazie per il codice
l'ho appena simulato e funziona alla perfezione,
appena posso lo compilo e lo butto giu sul 328.

per farlo andare sul micro devo togliere il $Sim che è una direttiva e poi ricompilare, giusto?

come faccio a trasformare i campi arr() in numeri che posso usare come valori per settaggi vari ad esempio: indirizzo, numero porta, valore porta?
grazie