ho deciso di postare su questo forum perché credo sia l'unico che possa darmi una mano con il problema che sto riscontrando.
Premetto che sono nuovo in quanto a programmazione con BASCOM e sto cercando di addentrarmi in mezzo a questa nuova jungla, anche perché l'unico linguaggio che ho utilizzato fin ora per programmare microcontrollori è stato l'HiTech-C per i PIC.
Il problema è il seguente: ho bisogno di pilotare un motore (esattamente un AX-18A della Dynamixel - http://www.electronickits.com/robot/BioloidAX-12(english).pdf anche se il modello è differente, i motori sono equivalenti nel protocollo di comunicazione).
Il motore utilizza l'UART per la comunicazione, in modalità half duplex: ho già provveduto a creare la scheda per la conversione da full duplex con 2 canali a half duplex con un solo canale, com'è spiegato nel datasheet del motore stesso.
Ora, ho bisogno di inviare un pacchetto tramite l'UART dal microcontrollore al motore, ma non conosco il baud rate iniziale per poter inviare questo primo pacchetto! Non ho trovato nulla che potesse indicare il baud rate, se non la velocità di trasmissione, impostata di default a 1000000... e non credo indichi il baud rate
Inoltre, date le mie scarse conoscenze per BASCOM, ho utilizzato il seguente codice per iniziare a sperimentare qualcosa:
- Code: Select all
$regfile = "m644adef.dat"
$crystal = 18432000
$hwstack = 40
$swstack = 16
$framesize = 32
$baud = 19200
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2 'Utilizzo un display LCD per il debug
Config Portc.0 = Output
Open "comc.2:19200,8,n,1" For Output As #1 'Apro una porta UART virtuale in uscita
Open "comc.4:19200,8,n,1" For Input As #2 'E una in ingresso
Dim Pacchetto_ric As String * 20
Dim Init1 As Byte , Init2 As Byte , Id As Byte , Lenght As Byte , Inst As Byte , Par1 As Byte , Par2 As Byte , Check As Byte
Init1 = &HFF 'Le seguenti istruzioni fanno parte del pacchetto che dovra' essere trasmesso
Init2 = &HFF
Id = &HFE 'In particolare l'id e' impostato in broadcast, quindi tutti i motori collegati su questa rete riceveranno il pacchetto
Lenght = &H04
Inst = &H03
Par1 = &H03 'I parametri imposteranno l'ID del motore a 1, così da poterlo distinguere all'interno di una rete di motori
Par2 = &H01 'Questo esempio e' stato preso dal datasheet del motore stesso
Check = &HF6
Config Lcd = 16 * 2
Cls
Home Upper
Lcd "Prova"
Wait 2 'Provando il display, tutto funziona correttamente
Cls
Waitms 10
Set Portc.0 'Imposto il pin di enable a 1 logico in modo da poter attivare il circuito nella parte di trasferimento, successivamente verra' reimpostato a 0 per permettere la ricezione
'Da questo punto in poi il programma sembra bloccarsi e il motore (dotato di LED per l'attivita') non da alcun segno di vita.
Print #1 , Init1
Print #1 , Init2
Print #1 , Id
Print #1 , Lenght
Print #1 , Inst
Print #1 , Par1
Print #1 , Par2
Print #1 , Check
Reset Portc.0
Pacchetto_ric = Waitkey(#2)
Home Upper
Lcd Pacchetto_ric
End
Potreste darmi una mano nella creazione di questo protocollo di rete? Sono sicuro che quello che ho fatto è sbagliatissimo, ma volevo provarci comunque...
Poi si parla di pacchetti trasmessi sulla rete... ma come faccio a creare un pacchetto con tutte quelle informazioni?
Spero di aver fornito abbastanza informazioni e che il problema sia più semplice di quanto sembri!
Grazie a tutti in anticipo,
Michele