' ********************************************************************** ' * File: gmbiob.bas - Rel. 1.1 con Bascom AVR IDE e LIB 1.11.7.4 * ' * Schede: GMB HR84 + GMM AM08 * ' * * ' * 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 20.01.04 * ' ********************************************************************** ' ' Il demo utilizza il timer 2 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. ' ' 20.01.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 AVR. ' ' ' !!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ' Nel menu Options | Compiler | Chip, impostare: ' ' Chip: M8 ' HW Stack: almeno 64 ' Soft Stack: almeno 32 ' Framesize: almeno 64 '****************** Direttive del compilatore ************************** ' ' Impostare ad 80h il limite per la memoria interna mediante il menu: ' Options/Compiler/Misc $regfile = "m8def.dat" $crystal = 7372800 $baud = 19200 ' '****************** 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 ' '****************** Dichiarazione delle variabili ********************** ' ' Uso generico Dim S As Byte ' Byte di uso generico e SetPwm Dim S1 As String * 1 ' Scheda su cui gira il demo ' '****************** Dichiarazione delle procedure ********************** ' Declare Sub Init() ' Inizializzazione Declare Function Leggi_char() As Byte ' Legge un carattere (sospensiva) ' '************************* Programma main ****************************** ' Main: Do Call Init() Print "Demo del PWM" Print Print "Timer 2 (8 bit) configurato come PWM (pin 8 dello zoccolo)." Do Inputhex "Duty cycle in hex (Es. 0F): " , S Ocr2 = S ' Reimposta il duty cycle Print "F per uscire o altro tasto per ripetere" S = Leggi_char() Loop Until S = "F" Tccr2 = &H48 ' Ferma Timer 2 Loop End ' '************************ Fine del programma *************************** ' ' '**************************** Procedure ******************************** ' Sub Init() Ddrb = Ddrb Or &H08 ' Imposta portb.3 come uscita Ocr2 = &H80 ' Duty Cycle 50% ' Modalita' Fast PWM, Nessun Prescaler, Pone ad 1 il pin 8 dello zoccolo ad ' ogni corrispondenza tra i registri OCR2 e contatore del timer Tccr2 = &H79 Tcnt2 = 0 ' Azzera il timer End Sub ' ' Legge un carattere dalla seriale in maniera sospensiva, lo stampa e lo ' converte in maiuscolo. ' Function Leggi_char() As Byte Local C As Byte C = Waitkey() Print Chr(c) C = C And &HDF ' Converte un carattere ASCII in maiuscolo Leggi_char = C End Function