' ********************************************************************** ' * File: Corso_BASCOMAVR_021.BAS * ' * Versione: 1.1 * ' * Data: 24.08.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 021 del corso BASCOM AVR. ' Gestisce un display alfanumerico da 2 x 20 caratteri. ' Il programma rappresenta messaggi, numeri, variabili e fornisce comandi al ' display presente sulla GMM TST3. Tale display è del tipo LCD retroilluminato ' a LED, è intelligente ed ha 2 righe da 20 caratteri. Il programma lo gestisce ' completamente con le istruzioni ad alto livello dedicate ai display, ' disponibili nel BASCOM AVR. ' Tutta la rappresentazione è stabilita da 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 Z1 della ' GMM TST3!! ' ' Aggiunte: Cursor; Shiftlcd; Display. ' ' 24/08/09: Corso_BASCOMAVR_021.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 | Compiler | LCD" settare: ' LCD type = 20 * 2 ' BUS mode = 4 bit ' Data mode = pin ' Enable = PORTD.2 ' RS = PORTD.3 ' DB7 = PORTC.3 ' DB6 = PORTC.2 ' DB5 = PORTD.5 ' DB4 = PORTD.4 ' LCD-address = indifferente ' RS-address = indifferente ' Make upper 3 bits 1 in LCD designer = non selezionato ' 4) 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 ' 5) 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 ; J3 in 1-2 ; J10 in 1-2 ; J11 in 1-2 !!! ' ' Risorsa pin Z1 pin Segnale Segnale uP ' hw GMM TST3 GMM AM08 GMM AM08 usato ' LCD.DB4 23 17 PD4 T0 XCK PD4 ' LCD.DB5 22 16 PD5 T1 PD5 ' LCD.DB6 21 15 PC2 ADC2 PC2 ' LCD.DB7 19 13 PC3 ADC3 PC3 ' LCD.E 25 19 PD2 INT0 PD2 ' LCD.RS 24 18 PD3 INT1 PD3 ' ' Segnale pin COMx pin CN5 pin Z1 pin Segnale Segnale ' PC DB9 GMM TST3 GMM TST3 GMM AM08 GMM AM08 uP ' 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. 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 ******************************* '************************ Dichiarazioni variabili ****************************** Dim Choice As Byte ' Operazione scelta Dim I As Byte ' Indice per cicli Dim Dischoice As Byte ' Scelta per display Dim Discnt As Byte ' Contatore per display Dim Disrow As Byte ' Riga della posizione cursore display Dim Discol As Byte ' Colonna della posizione cursore display Dim Disnum As Single ' Variabile numerica da rappresentare su display Dim Disstr As String * 20 ' Stringa con messaggio da rappresentare su display '************************ Dichiarazioni procedure ****************************** '************************** Programma principale ******************************* Main: Pinrx = 0 ' Inizializza segnali per comunicazione seriale Pintx = 0 ' come ingressi digitali Print ' Separa precedenti rappresentazioni su console Print Print " Gestione display LCD alfanumerico 20 x 2" ' Presenta programma su console Print "Il programma mostra messaggi, numeri, variabili e fornisce comandi sul display" Print "LCD della GMM TST3: tramite un menu` sul PC si effettuano le operazioni scelte" Print "sul display." Print "N.B. Le rappresentazioni che eccedono la riga del display, vengono troncate!!" Print ' Connessioni delle linee dell'LCD (vedere help in linea, schema elettrico ' GMM TST 3 e precedente tabella per ulteriori informazioni) Config Lcdmode = Port ' Utilizza il display mediante port del microcontrollore Config Lcdbus = 4 ' Utilizza il display a 4 bits Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portd.2 , Rs = Portd.3 Config Lcd = 20 * 2 ' Display LCD con 20 colonne e 2 righe Cls ' Cancella display LCD e posiziona su primo carattere Do ' Inizio loop infinito Print ' Presenta menù con le possibili operazioni Print "M -> Rappresenta messaggio" Print "V -> Rappresenta variabile" Print "P -> Posiziona cursore" Print "C -> Definisce stile cursore" Print "S -> Spostamento rappresentazione" Print "E -> Elimina rappresentazione" Print "A -> Abilitazione display" Print "Effettuare la scelta premendo il tasto associato: "; Choice = Waitkey() ' Attende scelta operazione da eseguire Printbin Choice ' Rappresenta scelta effettuata Print If Choice >= "a" Then ' Se scelta minuscola Choice = Choice And &HDF ' La converte in in maiuscolo End If Select Case Choice ' Controlla scelta convertita Case "M": ' Scelta operazione di rappresentazione messaggio Print "Inserire messaggio da rappresentare (max. 20 caratteri): " Input Disstr ' Richiede e preleva messaggio da rappresentare Lcd Disstr ' Rappresenta messaggio su diplay LCD Case "V": ' Scelta operazione di rappresentazione variabile numerica Print "Inserire valore per variabile numerica, anche decimale: " Input Disnum ' Richiede e preleva variabile numerica Lcd Disnum ' Rappresenta variabile numerica su display LCD Case "P": ' Scelta operazione di posizionamento cursore Input "Inserire riga cursore (1,2):" , Disrow ' Richiede e preleva riga del cursore Input "Inserire colonna cursore (1,20):" , Discol ' Richiede e preleva colonna del cursore Locate Disrow , Discol ' Setta cursore su posizione attuale display Case "C": ' Scelta operazione di definizione stile cursore Print "Selezionare stile cursore: Disattivo, Fisso, Lampeggiante (D,F,L):"; Dischoice = Waitkey() ' Attende scelta stile cursore Printbin Dischoice ' Rappresenta stile cursore scelto Print If Dischoice >= "a" Then ' Se scelta minuscola Dischoice = Dischoice And &HDF ' La converte in in maiuscolo End If Select Case Dischoice ' Controlla scelta convertita Case "D": ' Stile cursore disattivo Cursor Off Case "F": ' Stile cursore fisso Cursor On Noblink Case "L": ' Stile cursore lampeggiante Cursor On Blink End Select Case "S": ' Scelta operazione di spostamento rappresentazione Print "Spostamento rappresentazione a Destra o Sinistra (D,S):"; Dischoice = Waitkey() ' Attende scelta direzione spostamento da effettuare Printbin Dischoice ' Rappresenta direzione spostamento scelta Print If Dischoice >= "a" Then ' Se scelta minuscola Dischoice = Dischoice And &HDF ' La converte in in maiuscolo End If Input "Inserire spostamenti (1..20):" , Discnt ' Richiede e preleva numero spostamenti For I = 1 To Discnt ' Ciclo ripetuto per il numero spostamenti If Dischoice = "D" Then ' Controlla direzione spostamento scelta Shiftlcd Right ' Sposta rappresentazione di una posizione a destra Else Shiftlcd Leftt ' Sposta rappresentazione di una posizione a sinistra End If Wait 1 ' Attende 1 secondo Next I Case "E": ' Scelta operazione di cancellazione display Cls ' Cancella display LCD e posiziona su primo carattere Case "A": ' Scelta operazione di abilitazione display Print "Selezionare display Attivo o Disattivo (A,D):"; Dischoice = Waitkey() ' Attende scelta attivazione display Printbin Dischoice ' Rappresenta stile cursore scelto Print If Dischoice >= "a" Then ' Se scelta minuscola Dischoice = Dischoice And &HDF ' La converte in in maiuscolo End If If Dischoice = "A" Then ' Controlla abilitazione display scelta Display On ' Attiva rappresentazione su display Else Display Off ' Disattiva rappresentazione su display End If End Select Loop ' Fine ciclo infinito End '************************ Fine programma principale ****************************