' ********************************************************************** ' * File: Corso_BASCOMAVR_045.BAS * ' * Versione: 1.1 * ' * Data: 02.11.09 * ' * Ambiente sviluppo: Bascom-AVR Demo Ver. 1.11.9.1 + * ' * + AVR bootloader grifo(r) Ver. 1.2 * ' * Schede: GMM AM08 + GMM TST3 * ' * Sviluppato da: GRIFO(r) Italian Technology * ' * via Dell'Artigiano 8/6 * ' * 40016 S. Giorgio di Piano (BO) * ' * Tel. +39 051 892052 Fax. +39 051 893661 * ' * http://www.grifo.com http://www.grifo.it * ' * Autore: Gianluca Angelini * ' ********************************************************************** ' Programma di esempio 045 del corso BASCOM AVR. ' Servo motore a rotazione continua. ' Il programma consente di impostare il senso e la velocità di rotazione di ' un Servo motore a rotazione continua, tramite valori inseriti da console. Il ' segnale prescelto per controllare il Servo è il PB1 del Mini Modulo, ' riportato sul connettore CN4.3 della GMM TST3. Tale segnale è generato con ' le istruzioni per Servo del BASCOM, ad alto livello. ' Per le prove del programma è stato usato il modello Servo standard 900-00008 ' prodotto dalla Parallax. ' Il programma si presenta ed usa una console seriale dotata di monitor e ' tastiera, con un protocollo fisico costante a 19200 Baud, 8 Bit x chr, ' 1 Stop bit, Nessuna parità. ' Questa console può coincidere con un sistema in grado di gestire una ' comunicazione seriale in RS 232. Al fine di semplificarne l'uso si può ' usare un PC dotato di una linea COMx, che esegue un programma di emulazione ' terminale come HYPERTERMINAL o l'omonima modalità offerta dal BASCOM AVR ' (vedere Configurazioni IDE). ' Il programma funziona solo se la GMM AM08 è montata sullo zoccolo Z2 della ' GMM TST3!! ' ' Aggiunte: Nessuna ' ' 02/11/09: Corso_BASCOMAVR_045.BAS - Ver 1.1 - By G.A. ' Prima versione. ' ' '*************************** Configurazioni IDE ******************************** ' NOTE: per usare correttamente questo programma demo, eseguire i seguenti ' punti: ' 1) Controllare la presenza del file M8DEF.DAT nella directory di ' installazione del BASCOM-AVR e se non disponibile copiarlo e dopo ' rilanciare l'IDE. ' 2) Nella finestra "Options | Compiler | Chip" impostare: ' Chip: m8def.dat ' XRAM: None ' HW Stack: 64 ' Soft Stack: 32 ' Framesize: 64 ' XRAM waitstate: disattivo ' External Access Enable: disattivo ' 3) Nella finestra "Options | Communication" settare: ' COM port = la linea del PC collegata alla GMM AM08, tramite la GMM TST3 ' Baudrate = 19200 ' Parity = None ' Databits = 8 ' Stopbit = 1 ' Handshake = None ' Emulation = TTY ' Font = Terminal, Normale, 12 punti, colore bianco ' Backcolor = Navy ' 4) Al termine della compilazione, della programmazione del codice nella ' GMM AM08, aprire la finestra di emulazione terminale del BASCOM AVR con ' l'opzione: Tools | Terminal emulator (Ctrl+T) ed a questo punto resettare ' o riaccendere il Mini Modulo. '********************** Direttive del compilatore ****************************** $regfile "M8DEF.DAT" ' File di definizione microcontrollore usato $romstart = &H0 ' Indirizzo inizio codice in FLASH $crystal = 7372800 ' Frequenza quarzo del microcontrollore $hwstack = 64 ' Spazio per stack hardware $swstack = 32 ' Spazio per stack software $framesize = 64 ' Spazio per frame $map ' Genera informazioni di debug $baud = 19200 ' Velocità comunicazione seriale: 19200 Baud ' Altri parametri sono fissi a: 8 bit x chr ' 1 Stop bit ' No parity '******************************* Definizioni *********************************** ' Le risorse usate dal programma sono collegate come illustrato nella seguenti ' tabelle: ' !!! N.B. Sulla GMM TST3 i jumper devono essere posizionati come segue: ' J1 in 2-3 ; J2 in 1-2 ; J3 in 1-2 ; J5 in 2-3 ; J7 in 2-3 ; J8 in 2-3 ' J9 in 2-3 !!! ' ' Segnale Risorsa pin Z2 pin Segnale Segnale uP ' Servo GMM TST3 GMM TST3 GMM AM08 GMM AM08 usato ' PCM CN4.3 30 24 PB1 OC1A PB1 ' ' Segnale pin COMx pin CN5 pin Z2 pin Segnale Segnale uP ' PC DB9 GMM TST3 GMM TST3 GMM AM08 GMM AM08 usato ' TX 3 3 9 3 RxD RS232 PD0 ' RX 2 2 10 4 TxD RS232 PD1 ' GND 5 5 20 14 GND - ' Da questa tabella si ricava che il cavo di collegamento tra la COM del PC ed ' il CN5 della GMM TST3 è un normale cavo dritto o prolunga. Volendolo ' richiedere alla grifo(r) si deve specificare il codice CCR 9+9E. Pinservo1 Alias Portb.1 ' Bit con segnale d'uscita collegato a Servo motore 1 Pinrx Alias Ddrd.0 ' Bit con direzione segnale collegato a RxD GMM AM08 Pintx Alias Ddrd.1 ' Bit con direzione segnale collegato a TxD GMM AM08 '************************ Dichiarazioni costanti ******************************* Const Pcmmid = 92 ' Durata impulso PCM corrispondente a Servo fermo (circa 1,5 msec) '************************ Dichiarazioni variabili ****************************** Dim Hlpb As Byte ' Variabile byte di aiuto ad uso generico Dim Hlpw As Word ' Variabile word di aiuto ad uso generico '************************ Dichiarazioni procedure ****************************** '************************** Programma principale ******************************* Main: Pinrx = 0 ' Inizializza segnali per comunicazione seriale Pintx = 0 ' come ingressi digitali Pinservo1 = 1 ' Inizializza segnale collegato a Servo 1 come uscita digitale alta Ddrb.1 = 1 Print ' Separa da precedenti indicazioni, andando su nuova riga Print Print " Gestione Servo motore a rotazione continua ad alto livello" Print "Montare Mini Modulo su Z2 della GMM TST3, collegare PCM del Servo a CN4.3." ' La gestione del Servo motore viene effettuata con delle istruzioni ad alto ' livello del BASCOM. Queste generano un segnale che non segue le specifiche ' temporali del segnale PCM di controllo del Servo a rotazione continua, e si ' possono quisdi settare poche velocità. ' Le istruzioni del BASCOM usano un interrupt periodico generato dal TIMER0, ' che quindi non può essere usato per altre funzioni!!! ' La risoluzione (=durata) delle temporizzazioni è definita dal valore di ' Reload impostato con l'istruzione Config Servo... e dalla posizione settata ' con l'istruzione Servo()..., come indicato nell'aiuto in linea del BASCOM. ' Questo demo imposta un tempo di reload minimo che non provoca vibrazioni ' pari a 10 usec, da cui si ottiene la risoluzione sulle velocità. ' Visto che la durata del segnale PCM varia da 1,25 a 1,75 millisecondi, ' si ottiene: ' 1750 - 1250 = 500 microsecondi ' 500 / 10 = 50 durate impulso = 50 diverse velocità Config Servos = 1 , Servo1 = Portb.1 , Reload = 10 ' Imposta gestione del Servo con BASCOM Enable Interrupts ' Abilitazione generale interrupts Servo(1) = Pcmmid ' Servo su posizione neutra centrale (albero fermo) Print "Generazione PCM di durata intermedia per Servo fermo. Ruotare trimmer del Servo" Print "fino a quando non si arresta e premere tasto per continuare..."; Hlpb = Waitkey() ' Attende pressione tasto su console Print Do ' Inizio loop infinito ' La velocità inserita dall'utente varia da quella massima in senso orario a ' quella massima in senso antiorario, passando per la condizione di albero ' fermo, centrale Print Print "Valore per albero fermo = " ; Pcmmid ; ". Valori inferiori provocano rotazione in" Print "senso orario e valori superiori in senso antiorario. Piu` il valore e` lontano" Print "e maggiore e` la velocita`." Input "Inserire nuova velocita` di rotazione:" , Hlpw Servo(1) = Hlpw ' Imposta durata impulso PCM inserita Loop ' Fine ciclo infinito End '************************ Fine programma principale ****************************