Problema con comando INPUT e micro ATMEGA32

Sezione dedicata al sistema di sviluppo BASCOM-AVR per i micro AVR
At90s, Attiny, Atmega e Xmega

Problema con comando INPUT e micro ATMEGA32

Postby Bufere » 11 Nov 2013, 20:21

Eccomi appena iscritto e già con un problema, come detto nella presentazione è da poco tempo che uso gli AVR che sono ancora da scoprire in ogni piccola funzione nascosta.
Da qualche settimana sto personalizzando un codice sorgente trovato in rete, scritto in Bascom AVR, riguardante una semplice interfaccia che comunica con Protocollo Modbus.
In questo sorgente non era prevista la possibilità di modoficare l'indirizzo fisico ed il baudrate cosa che ho deciso di fare io tramite dip-switch e volendo eliminare anche questi utilizzando la Uart,introducendo questi due parametri e salvandoli nella eeprom del micro, si tratta di un ATmega32.
Il problema nasce in questo punto già all'inizio del programma

----> Input "Use this to ask a question " , V (sembra arrestarsi in questo punto come ibernato)
Print "hai scritto " ; V

Quando la riga di processo arriva in questo punto sembra bloccarsi impedendo lo scan ed il conseguente riconoscimento del Byte trasmesso via seriale.
Sembra assurdo ma è cosi e si può verificare anche con il simulatore interno del Bascom ma si comporta esattamente uguale con l'hardware vero e proprio.
Il programma in verità sarebbe molto più lungo e complesso e non posso postarlo completamente perchè in parte di copyright.

Un ringraziamento al Sig. DeLuca che in un primo colloquio privato è stato cosi gentile di ascoltare il mio problema.

Un saluto a tutti

Saluti
Roberto


Code: Select all
'****************************************************************
' Compiler directives
'****************************************************************
$sim
$regfile = "m32def.dat"                                     ' chip used
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 10                                               ' default use 10 for the SW stack
$framesize = 32
$crystal = 14745600
Baud = 19200

Startprogram:
                                              ' default use 40 for the frame space
Dim V As Byte
Input "Use this to ask a question " , V                     '<---Questo è il punto in cui si ferma e non riceve nessun carattere dalla seriale !!!!!!!!
Print "hai scritto " ; V

Goto Startprogram

Dim Xx As Byte
Dim Yy As Byte
Dim Addrr As Byte
Dim Text As String * 10
Config Pind.2 = Input
Config Pind.3 = Input
Config Pind.4 = Input
Config Pind.5 = Input
Config Pind.6 = Input
Config Pind.7 = Input
Config Pinc.1 = Input
Xx = 0
Yy = 0
If Pind.2 = 0 Then Xx = 1
Yy = Yy + Xx
Xx = 0
If Pind.3 = 0 Then Xx = 2
Yy = Yy + Xx
Xx = 0
If Pind.4 = 0 Then Xx = 4
Yy = Yy + Xx
Xx = 0
If Pind.5 = 0 Then Xx = 8
Yy = Yy + Xx
Xx = 0
If Yy = 0 Then Yy = 1
Addrr = Yy

Xx = 0
Yy = 0

If Pind.6 = 0 Then Xx = 1
Yy = Yy + Xx
Xx = 0
If Pind.7 = 0 Then Xx = 2
Yy = Yy + Xx
Xx = 0
If Pinc.1 = 0 Then Xx = 4
Yy = Yy + Xx
Xx = 0

If Yy = 1 Then Baud = 2400
If Yy = 2 Then Baud = 4800
If Yy = 3 Then Baud = 9600
If Yy = 4 Then Baud = 19200
If Yy = 5 Then Baud = 38400
If Yy = 6 Then Baud = 57600
If Yy = 7 Then Baud = 115200

If Yy = 0 Then Text = "STOP LOOP"
If Yy = 1 Then Text = "2400 8N1"
If Yy = 2 Then Text = "4800 8N1"
If Yy = 3 Then Text = "9600 8N1"
If Yy = 4 Then Text = "19200 8N1"
If Yy = 5 Then Text = "38400 8N1"
If Yy = 6 Then Text = "57600 8N1"
If Yy = 7 Then Text = "115200 8N1"
Cls

Lcd "Addr :" ; Addrr ;
Lowerline
Lcd "Baud :" ; Yy ; " " ; Text
Waitms 200
If Yy = 0 Then Goto Startprogram

'modbus.lib contains the crcMB function
$lib "modbus.lbx"
'****************************************************************
'Il programma prosegue ed è molto lungo ma durante la compilazione non genera errori
'****************************************************************
Attachments
rid_Modbus_client.bas
(2.35 KiB) Downloaded 289 times
Bufere
 
Posts: 4
Joined: 10 Nov 2013, 15:52
Location: UDINE

Re: Problema con comando INPUT e micro ATMEGA32

Postby deluca » 11 Nov 2013, 21:01

@Bufere, benvenuto....

Code: Select all
Input "Use this to ask a question " , V    'Questo è il punto in cui si ferma e non riceve nessun carattere dalla seriale !!!!!!!!   


Per favore spiega in modo + dettagliato il commento.

L'istruzione INPUT aspetta caratteri dalla seriale .... se V è dichiarato come byte allora si aspetta un valore numerico compreso tra 0 e 255.
Per procedere, INPUT deve essere terminato con Carriage_Return.
!!! Se non arriva nulla dalla seriale, o INPUT non viene terminato, il prg si bloccherà su INPUT per un tempo infinito.

Wait for next replay.
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Problema con comando INPUT e micro ATMEGA32

Postby Bufere » 11 Nov 2013, 23:02

Infatti se compilo solamente la parte di programma fino al punto "goto Startprogram" cancellando tutta la parte di programma successiva, il programma funziona regolarmente, quindi un valore o carattere compreso tra 0 e 255 seguito dal CR viene riconosciuto e procede con la line successiva.

Il problema si manifesta nel compilare il programmino descritto con tutto il codice successivo, la compilazione viene eseguita senza errori ma durante il run del programma si ferma alla linea di input seppur digitando un carattere seguito dal tasto CR (Return) , il tutto resta immobile congelato su questa linea.
A mio avviso sembra che il microprocessore non legga il byte in ingresso e quindi non processa l'identificazione del carattere inviato.
Spero di essere stato chiaro, comunque per ricreare il problema è necessario il sorgente completo e non solo una sua parte.
Bufere
 
Posts: 4
Joined: 10 Nov 2013, 15:52
Location: UDINE

Re: Problema con comando INPUT e micro ATMEGA32

Postby deluca » 12 Nov 2013, 08:11

@bufere,
con quale versione stai compilando?
L'ultima versione del compilatore rileva alcuni errori.
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Problema con comando INPUT e micro ATMEGA32

Postby deluca » 12 Nov 2013, 09:03

Tutto chiaro !!
la seriale è configurata come:
Code: Select all
 Config Serialin = Buffered , Size = 16 , Bytematch = All

e la gestione dell'interrupt è affidata a:
Code: Select all
Serial0bytereceived:
   Load Timer1 , Load_timer
   Start Timer1
Return


Quindi, se prima non abiliti gli interrupts difficilmente riuscirai ad intercettare i caratteri con l'istruzione INPUT.
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Problema con comando INPUT e micro ATMEGA32

Postby Bufere » 12 Nov 2013, 18:46

Scusate il ritardo mala mattina dormo e lavoro di notte (Centro stampa quotidiani).
Avevo omesso una informazione importante la vesrione di Bascom AVR da me utilizzata è la 2.0.7.3, infatti con le successive genera qualche errore.
Problema centrato in pieno, tutto nasce dal fatto cche sono partito da un sorgente pre esistente non fatto da me e come capita in questi casi si inizia ad aggiungere codice all'inizio, alla fine ed in mezzo.
Bene in questo caso io ho aggiunto buona parte di codice all'inizio e le righe di configurazione della seriale sono rimaste a metà.
In sostanza , come ha già chiarito il Sig. DeLuca devo prima inizializzare la mia seriale e poi utilizzarla in modi diversi in diversi punti del programma cosi:
Code: Select all
'****************************************************************
' ad inizio programma si configura la UART ed in questo caso si pretende l'uso degli interupt
'****************************************************************
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialin = Buffered , Size = 16 , Bytematch = All
Config Timer1 = Timer , Prescale = 256

parte di programma
Code: Select all
'****************************************************************
' parte X di programma utilizzo la seriale cosi
'****************************************************************
Baud = 19200
Load Timer1 , &H0083
Enable Timer1
Start Timer1
Enable Interrupts
Clear Serialin

parte di programma
Code: Select all
'****************************************************************
' parte Y di programma utilizzo la seriale cosi
'****************************************************************
Baud = 115200
Load Timer1 , &H0050
Enable Timer1
Start Timer1
Enable Interrupts
Clear Serialin

Nel mio caso, quando il codice non funzionava la parte di configurazione della seriale risiedeva in mezzo tra la parte X e Y del programma, quindi funzionava solo il codice per la parte Y, inoltre non avevo inserito i comandi relativi agli interrupts per la parte X, di conseguenza alla richiesta del comando INPUT la seriale non era correttamente settata ed abilitata alla ricezione dei dati.

Sistemato tutto il codice ed ora gira che è una meraviglia.
Grazie mille Sig. DeLuca
Bufere
 
Posts: 4
Joined: 10 Nov 2013, 15:52
Location: UDINE

Re: Problema con comando INPUT e micro ATMEGA32

Postby deluca » 12 Nov 2013, 21:40

@bufere,
benissimo, vedo che seguendo le mie indicazioni hai risolto alla grande :)
Per compilare con le ultime versioni di bascom-avr il sorgente necessita di qualche modifica.
Su mio suggerimento, sono state apportate notevoli migliorie nel compilatore per quanto riguarda la gestione delle array all'interno delle sub
ed adesso è possibile passare ad una sub parametri anche nel formato array().

buona serata..... e buon lavoro.
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)


Return to BASCOM-AVR

Who is online

Users browsing this forum: No registered users and 11 guests

cron