' ********************************************************************** ' * File gmbda.bas - Rel. 1.1 con Bascom 8051 DEMO IDE e LIB 2.0.11.0 * ' * GRIFO(R) via Dell'Artigiano 8/6 40016 S. Giorgio di Piano (BO) * ' * Scheda: GMB HR168 + GMM AC2 * ' * 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 24.02.04 * ' ********************************************************************** ' ' Il demo utilizza la sezione 0 del PCA del Mini Modulo per generare, su CN7, ' 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. ' ' ' ' !!!!!!!!!!!!!!!!!!!!! ATTENZIONE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ' Nel menu Options/Compiler/Misc impostare: ' - Byte End(hex) ad almeno A0 ' ' ' 24.02.04 - Rel 1.1 By Graziano Gaiba ' ' Il file compilato non supera i 2048 bytes, quindi puo' essere ' compilato con il demo gratuito di BASCOM 8051. ' '****************** Direttive del compilatore ************************** ' $regfile = "89c51ac2.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 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 ' ' '************************* 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.1 per Modulo GMB HR168 d.s. 110104" Print Print "Se il modulo GMB HR168 e' in RS 422 o 485, il pin 6 di CN4 puo' essere" Print "usato per la direzione della comunicazione, in tal caso il PWM non e'" Print "disponibile. Continuare solo se J10 NON E' in 2-3." Print "Continuare (S/N)?" Do S1 = Waitkey S1 = Ucase(s1) Loop Until S1 = "S" Or S1 = "N" Print S1 If S1 = "N" Then Print "DIR non utilizzabile" Do Loop 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 CN7 di GMB HR168" Print Print "Il pin 6 di CN7 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." Print "Se J10 e' in 3-4, il segnale raggiungera' il rele' RL8 (uscita D2)." 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 *************************** '