' ********************************************************************** ' * File gmbda.bas - Rel. 1.2 con Bascom 8051 DEMO IDE e LIB 2.0.11.0 * ' * GRIFO(R) 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 * ' * sales@grifo.it tech@grifo.it grifo@grifo.it * ' * by Graziano Gaiba del 12.05.03 * ' ********************************************************************** ' ' Il demo utilizza la sezione 0 del PCA del Mini Modulo per generare, su CN4, ' un segnale PWM di frequenza prestabilita, con duty cycle programmabile in ' percentuale da console. Tale segnale, collegato ad una opportuna circuiteria ' integratrice (rete RC, amplificatore operazionale con capacita' su ramo di ' retroazione, ecc.) permette di ottenere un segnale analogico analogo a quello ' di un D/A. L'esecuzione del demo e' subordinata al Mini Modulo utilizzato e ' alla configurazione della linea seriale. ' ' 28.04.03 - Rel 1.1 By Graziano Gaiba ' ' ' 12.05.03 - Rel 1.2 By Graziano Gaiba ' Aggiunto messaggio sul preciso utilizzo dell'uscita su pin 6 di CN4. ' Limitato il codice al pilotaggio della suddetta linea. ' ' Il file compilato non supera i 2048 bytes, quindi puo' essere ' compilato con il demo gratuito di BASCOM 8051. ' '****************** Direttive del compilatore ************************** ' ' Impostare ad 80h il limite per la memoria interna mediante il menu: ' Options/Compiler/Misc $regfile = "grifo_mm.dat" $romstart = &H0 ' indirizzo di partenza del codice ' macchina per FLASH $ramstart = &H0 ' indirizzo di partenza della area ' dati $ramsize = &H100 ' pongo a 256 bytes la area dati $crystal = 14745600 ' frequenza di clock del microcontrollore $baud = 19200 ' velocità di comunicazione RS-232 '$large ' indirizzamento a 16 bit ' solo se si non usa la versione demo $map ' Genera una mappa degli indirizzi ' per ogni linea di codice ' '****************** Dichiarazione delle costanti *********************** ' Const Cret = 13 ' Codice di ritorno di carrello Const Nl = 10 ' Codice nuova linea Const Clrscr = 12 ' codice di clear screen Const Bell = 7 ' codice di Bell Const R = 1 ' valore per leggere in I2C Bus Const W = 0 ' valore per scrivere in I2C Bus ' Codice della scheda sulla quale gira il demo Const Can_gm1 = "1" Const Can_gm2 = "2" Const Gmm_5115 = "3" Cr Alias Ccon.6 ' Controllo timer del PCA ' '****************** Dichiarazione delle variabili ********************** ' ' Uso generico Dim S As Byte , C As Byte ' Byte di uso generico e SetPwm Dim S1 As String * 1 ' Scheda su cui gira il demo Dim Board As Byte ' '************************* Programma main ****************************** ' Main: ' Inizializza il demo Disable Interrupts ' Disabilita gli interrupts Auxr = &H0C ' Seleziona Eram Su Area Dati Esterna Eecon = &H00 ' Disabilita Eeprom Del Micro P3 = &HFF ' Setta port 3 in input Do Print Chr(clrscr); ' Pulisce lo schermo Print "Demo 1.2 per GMB HR84 ds 100203" Print Print "Su quale Mini Modulo grifo(r) sta girando il demo:" Print "1) CAN GM1" Print "2) CAN GM2" Print "3) GMM 5115" Print Print "SELEZIONE: "; Do Board = Inkey ' Attesa sospensiva di un tasto Loop Until Board <> 0 Print Chr(board) If Board <> Can_gm1 Then Print "Il modulo GMB HR84 e' in RS 422 o 485 (S/N)? "; Do S1 = Waitkey S1 = Ucase(s1) Loop Until S1 = "S" Or S1 = "N" Print S1 If S1 = "S" Then Print "Il pin 6 di CN4 viene usato per la direzione della comunicazione." Print "PWM per D/A non disponibile." Do Loop End If End If ' Gestione dei moduli di capture/compare del PCA come generatori PWM Print Chr(clrscr); ' Cancello lo schermo Print "Demo PCA gestito come PWM su pin 6 del CN4 di GMB HR84" Print Print "Il pin 6 di CN4 e` in grado di generare un segnale PWM che tramite un" Print "semplice integratore (rete RC, amp. op. con capacita` su ramo di retroazione" Print "ecc) genera un segnale analogico (D/A). La risoluzione del PWM e` di 8 bit" Print "mentre la frequenza e` settabile via software. Questo demo lascia programmare" Print "il duty cicle ed usa una frequenza=Fclk/(2*6*256)KHz." C = Adcf C.3 = 0 Adcf = C ' P1.3 come I/O Cmod = &H00 ' Frequenza di clock scelta pari a ' FPca diviso 6, periferica abilitata ' a funzionare anche in Idle Mode, ' no interrupt Cr = 1 ' Abilita PCA Timer/Counter Do Print Do Input "Duty Cycle (0..100 %): " , S Loop Until S >= 0 And S <= 100 S = S * 2.55 Ccapm0 = &H42 ' Abilita PWM su modulo 0 PCA Ccap0h = S ' Attiva uscita PWM Print "Impostazione effettuata." Loop Cr = 0 ' Ferma PCA Timer/Counter End ' '************************ Fine del programma *************************** '