' ********************************************************************** ' * File: gmbad.bas - Rel. 1.1 con Bascom AVR IDE e LIB 1.11.7.4 * ' * Schede: GMB HR168 + GMM AM128 * ' * 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 * ' * by Graziano Gaiba del 17.06.05 * ' ********************************************************************** ' ' 17.06.05 - Rel 1.1 By Graziano Gaiba ' Questo demo rappresenta di continuo sulla console la combinazione ' dell'ingresso analogico presente sul pin 8 CN4, ovvero ADC7. ' Il segnale di riferimento usato e' quello interno da 2,56 V, per ' impostare il fondo scala corrispondente connettere J6 un 1-2. ' ' 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: M128 ' HW Stack: almeno 64 ' Soft Stack: almeno 32 ' Framesize: almeno 64 ' ' ' $regfile = "m128def.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 ' Const Ee_timeout = 50000 ' '****************** Dichiarazione delle variabili ********************** ' Dim I As Byte , Conv_h As Byte , Conv_l As Byte ' '*********** Configurazione dispositivi interni e interrupt ************ ' ' Configura l'AD converter per conversione singola, Vref interna e prescaler ' automatico. Config Adc = Single , Prescaler = Auto , Reference = Internal ' ' '****************** Dichiarazione delle procedure ********************** ' Declare Sub Init() ' Inizializzazione ' Declare Sub Demoad() ' Demo A/D converter in polling o interrupt Declare Sub Check_ready() Declare Function Check_ready_2() As Byte ' '************************* Programma main ****************************** ' Main: Call Init() ' Inzializza il modulo Portf.4 = 1 ' Spegne i relays Portf.5 = 1 Portf.6 = 1 Portf.7 = 1 Portb.3 = 1 Portb.2 = 1 Portb.1 = 1 Porte.2 = 1 Print Chr(clrscr); ' Pulisce lo schermo Print "Demo 1.1 per GMM AM128 + GMB HR168" Print Call Check_ready() ' Verifica scheda pronta Do Print "Il segnale analogico presente sul pin 8 di CN7 viene convertito." Print "Collegando J11 in 1-2 il range va da 0 a 2,5 V, collegando J11 in 2-3" Print "il range va da 0 a 10 V." Print "Viene usata la tensione di riferimento esterna di 2,5 V generata da GMB HR168." Print "POLLING" Print Print "CH00" Start Adc ' Attiva l'AD Converter Do Admux = 0 ' Selezione canale ADC7 ' e Vref esterna Adcsr.adsc = 1 ' Inizia conversione Do Loop Until Adcsr.adif = 1 ' Attende fine conversione Adcsr.adif = 1 ' Resetta flag fine conversione Conv_l = Adcl ' Leggere sempre il byte basso per primo Conv_h = Adch Print Hex(conv_h) ; Hex(conv_l) ; ' Stampa la conversione Print Chr(cret); ' Ritorno a capo Waitms 100 ' Ritardo per trasmissione I = Inkey() Loop Until I <> 0 Stop Adc Loop End ' '************************ Fine del programma *************************** ' ' '**************************** Procedure ******************************** ' ' Inizializza il demo Sub Init() ' Inizializza la direzionalita' dei port che pilotano gli ingressi optoisolati ' e le uscite a rele': ' IN1-1 - Portb.7 ' IN2-1 - Portb.6 ' IN3-1 - Porte.4 ' IN4-1 - Porte.5 ' IN5-1 - Portd.7 ' IN6-1 - Porte.6 ' IN7-1 - Portb.4 ' IN8-1 - Portb.0 Ddrb.7 = 0 Ddrb.6 = 0 Ddre.4 = 0 Ddre.5 = 0 Ddrd.7 = 0 Ddre.6 = 0 Ddrb.4 = 0 Ddrb.0 = 0 ' IN1-2 - Portc.0 ' IN2-2 - Portc.1 ' IN3-2 - Portc.2 ' IN4-2 - Portc.3 ' IN5-2 - Portc.4 ' IN6-2 - Portc.5 ' IN7-2 - Portc.6 ' IN8-2 - Portc.7 Ddrc = 0 ' OUT A1 - Portf.4 ' OUT A2 - Portf.5 ' OUT B1 - Portf.6 ' OUT B2 - Portf.7 ' OUT C1 - Portb.3 ' OUT C2 - Portb.2 ' OUT D1 - Portb.1 ' OUT D2 - Porte.2 (di default, ovvero con J10 in 3-4) Ddrf.4 = 1 Ddrf.5 = 1 Ddrf.6 = 1 Ddrf.7 = 1 Ddrb.3 = 1 Ddrb.2 = 1 Ddrb.1 = 1 Ddre.2 = 1 End Sub ' '****************************************************************************** '* Procedure di uso generico * '****************************************************************************** ' ' ' ' Funzione di supporto della Check_ready(). ' Function Check_ready_2() As Byte Local Time_out As Word , I_n As Byte Time_out = 0 ' Contatore timeout Do Incr Time_out ' Incrementa contatore Loop Until Twcr.twint = 1 Or Time_out = Ee_timeout I_n = Twsr I_n = I_n And &HF8 Check_ready_2 = I End Function ' ' ' Controlla che la scheda sia pronta ' Sub Check_ready() Local Check As Byte , Test As Byte Do ' Ciclo attesa scheda pronta Twsr = Twsr And &HFC Check = Twdr Or &HF4 Test.4 = Not Check.3 Twbr = 72 Twcr = &HA4 Check = Check_ready_2() Test = Check Or Twcr If Check = &H09 Then Test = &H67 Else Test.1 = Not Test.1 End If Twdr = &HA0 Twcr = &H84 Check = Check_ready_2() Twcr = &H94 Waitms 27 Loop Until Check = &H18 Or Test <> 1 Twcr.twen = 0 End Sub