LAMPEGGIO LED TRAMITE TIMER INTERRUPT - PARTE 4 1

Похожие документы
Davide Gennaretti, Matteo Nicolini

Gestire l'interrupt in MikroBasic

TUTORIAL GPL_BENZINA CON PIC16F1826 (UTILIZZO DELL ADC)

I microcontrollori. In sostanza i pic hanno le seguenti caratteristiche:

Nicola Amoroso. Corso introduttivo sui microcontrollori A. S La programmazione dei PIC TIMERS.

Corso di Informatica Applicata. Lezione 7. Università degli studi di Cassino

mendiante un ciclo e finché il segnale rimane alto, si valuta il tempo T3 usando il timer del microcontrollore e una variabile di conteggio.

Introduzione al PICmicro 16F877 PIC16F877

GESTIONE DEI TEMPI CON IL TIMER1 DEL PIC16F876

Lezione 8. Figura 1. Configurazione del registro INTCON

Architettura dei Microcontrollori Microchip PIC18F

Primo Utilizzo Su breadboard >> questo schema.

Gestione Degli INTERRUPT

In questa puntata scopriremo

LO HAI MAI REALIZZATO CON UN PIC? UN APPROCCIO AI TIMER DEI PICMICRO 1

Lezione 2. Figura 1. Schema del circuito necessario per le prove

Corso di programmazione Arduino DI MALVEZZI DAVIDE

SISTEMA DI SVILUPPO MC-16

Capitolo X del Testo Ettore Panella Giuseppe Spalierno Corso di Elettronica 3 Edizioni Cupido MICROCONTROLLORE PIC 16F84

Architettura del PIC 18F452

MICROCONTROLLORE PIC16F84A

Gestione di un Motore Passo-Passo

NOZIONI BASE DI ASSEMBLER PER PIC16C84

Creazione nuovo progetto:

Corso introduttivo sui microcontrollori A. S La programmazione dei PIC Esempio: 2 led blinking [alternate ON-OFF ] con ritardo di 500 ms

CORSO di AUTOMAZIONE INDUSTRIALE

Quaderni di Elettronica corso per creativi ed inventori

Vogliamo far lampeggiare i led collegati come in figura ai bit della porta D del PIC 18F8722 presente sulla demo board in dotazione al laboratorio.

Progetto 3: Termometro con convertitore A/D

DISPOSITIVO PER LA LETTURA DI UN ENCODER INCREMENTALE

Tutorial MPLAB X 3.15

Programmazione del microcontrollore PIC 16F84

I PIC Partendo da Zero By link_89

Giochiamo CON I LED. Quello che vedremo è un semplice. progettare & costruire di ROBERTO D AMICO. Tutorial PIC18 (parte seconda)

OROLOGIO DELLA DITTA SOLARI DI UDINE

Il µcontrollore PIC 16F84

Architettura Harvard: il PIC possiede memorie separate per i dati e le istruzioni.

Il sensore ad ultrasuoni

I microcontrollori PIC parte III

Il precedente programma è scritto in linguaggio Assembly per Z80. Il programma indicato sopra deve essere tradotto in codice Assembly per PIC

PIC E DISPLAY A 7 SEGMENTI CON

luciano trapa I MICROCONTROLLORI (µc o MCU o microcomputer single chip) ED IL PIC 16 F 877 A

overview PROGETTAZIONE ELETTRONICA CON MICROCONTROLLORI E PROGRAMMAZIONE IN C POLITECNICO DI MILANO PROGRAMMAZIONE C PER MICROCONTROLLORI

Indice. Introduzione 15. L hardware 24. Il software 43. Introduzione al linguaggio di Arduino 60. Basi del linguaggio di Arduino 65

Prof. Capuzzimati Mario - ITIS Magistri Cumacini - Como MICROCONTROLLORE

Nicola Amoroso. Corso introduttivo sui microcontrollori A. S Microcontrollori Microchip PIC 8 bit. namoroso@mrscuole.

Elettronica dei Sistemi Programmabili A.A Microcontrollori. Introduzione allo sviluppo di progetti

D.A.M. Bros Robotics -

INTRODUZIONE alla PROGRAMMAZIONE di MICROCONTROLLORI

Centralina controllo pompa

I microcontrollori PIC Parte II

Raccolta Test di Laboratorio di Sistemi a Microcontrollore

CIRCUITO DI TEST E SOFTWARE UTILIZZATI

Lezione 6 L'hardware dedicato.

Il microcontrollore Microchip pic18f2420

E&E E&E. Elettronica E&E. Elettronica. Per il secondo biennio. Edizione Riforma. Scienze e Tecnologia. E. Cuniberti L. De Lucchi.

8 Microcontrollori PIC

Introduzione alla scheda Arduino/Genuino

INIZIARE CON AVR ATMEGA

Capitolo 3. Il microcontrollore PIC16F877: architettura e periferiche utilizzate

Nicola Amoroso. Corso introduttivo sui microcontrollori PIC PWM.

Le sintonie elettroniche per l ATV

PUNTATORE LASER AUTOMATICO CON COMANDO VIA ETHERNET

Corso introduttivo sui microcontrollori. Un sistema tastierino a matrice 4x4 da collegare alla nostra demoboard AnxaPic.

Corso Professionale di Arduino Avanzato

release 3 Il microcontrollore PIC16F877A di Ippolito Perlasca Presentazione

Lezione 4. Figura 1. Schema di una tastiera a matrice di 4x4 tasti

GENERATORE DI BASE TEMPI

SCHEDA SPERIMENTALE ARDUINO UNO

ERRORI GENERATI DAL BIOS IN FASE DI AVVIO. Di Abe Wayer

M1410 Ingresso/Uscita parallelo

M. Electronics. M.M.Electronics - Michele Marino - Controllo analogico di una tastiera a matrice V 0.

Транскрипт:

Danilo B (ildani) LAMPEGGIO LED TRAMITE TIMER INTERRUPT - PARTE 4 15 January 2013 Introduzione Questa è la quarta ed ultima parte dell'articolo Lampeggio led tramite Timer Interrupt. Non lampeggia Come ho scritto nell'ultima frase della terza parte dell'articolo, mi trovavo di fronte ad un led semiacceso, eppure mi sembrava di avere scritto correttamente il codice! In MPLAB X IDE apro le proprietà del progetto, e nella configurazione seleziono in Hardware Tools la voce Simulator anzichè PICkit3 per provare a simulare il funzionamento del programma. Metto alcuni breakpoint nel codice per far fermare l'esecuzione del programma e dare un'occhiata alle variabili e ai registri prima di ripartire: il codice funziona bene. Cosa c'è allora che non fa funzionare il circuito nella pratica? La soluzione Il giorno seguente, mentre sistemo un po' le finestre in Firefox dove tengo aperti i siti che sto consultando per imparare la programmazione dei PIC, la mia attenzione viene catturata da un Webinar (abbreviazione di Web Seminar, seminario on-line) della Microchip intitolato "Flash, Damned LED! Flash I say!" (lampeggia, dannato led! Lampeggia ho detto!). Faccio partire il video ed il relatore Jeff O'Keefe spiega che affronterà i comuni errori commessi dai principianti per far lampeggiare un led. Non ero molto fiducioso di incontrare la soluzione al mio problema, e invece... LAMPEGGIO LED TRAMITE TIMER INTERRUPT - PARTE 4 1

Chi controlla il pin Il video arriva alla quarta slide che richiama dei concetti che già conoscevo, ma che non avevo a quanto pare ben assimilato. Anche in questo caso il problema e la relativa soluzione erano banali! Non mi ero ricordato che i pin spesso svolgono più di una funzione e sono condivisi da più periferiche, sono multiplexati. In particolare il pin RA0 scelto da me per collegare il led, svolge sia la funzione di ingresso/uscita digitale RA0, sia la funzione di ingresso/uscita analogico AN0. Per configurare correttamente questo pin dovevo agire su un secondo registro, oltre che sul noto TRIS: si tratta del registro ADCON1, ossia uno dei due registri usati per configurare il convertitore analogico/digitale. Come suggerisce la slide del seminario, con l'istruzione ADCON1 = 0b00000110; si impostano tutti i pin disponibili per il convertitore A/D come ingressi/uscite digitali. Aggiungo in fretta quest'istruzione al mio codice, reimposto il programmatore PicKit3 e carico il programma sul mio PIC16F87. Ed ecco il led che lampeggia! Poi provo a cambiare il valore del TempoLampeggio e noto che funziona bene, il led lampeggia più o meno brevemente a seconda del valore. Finalmente ho realizzato quello che volevo. LAMPEGGIO LED TRAMITE TIMER INTERRUPT - PARTE 4 2

Codice finale #include <xc.h> //DEFINE #define TempoLampeggio 500 #define Led PORTAbits.RA0 // CONFIG #pragma config FOSC = XT #pragma config WDTE = OFF #pragma config PWRTE = OFF #pragma config CP = OFF #pragma config BOREN = OFF #pragma config LVP = OFF #pragma config CPD = OFF #pragma config WRT = ON // Oscillator Selection bits (XT oscillator) // Watchdog Timer Enable bit (WDT disabled) // Power-up Timer Enable bit (PWRT disabled) // FLASH Program Memory Code Protection bits (Code prot // Brown-out Reset Enable bit (BOR disabled) // Low Voltage In-Circuit Serial Programming Enable bit // Data EE Memory Code Protection (Code Protection off) // FLASH Program Memory Write Enable (Unprotected progr //VARIABILI unsigned int Tempo = 0; void main(void) { //IMPOSTAZIONE PORTE INPUT/OUTPUT //PORTA is a 6-bit wide, bi-directional port. TRISA = 0; TRISB = 0; TRISC = 0; //IMPOSTAZIONE PORTE: TUTTE DIGITALI ADCON1 = 0b00000110; //ACCENSIONE Led Led = 1; //IMPOSTARE PRESCALER // Generato da PicTimer 1.0.1.0 // Bernardo Giovanni - www.settorezero.com // Codice valido per Hitec-C // Fosc :4MHz // Timer0 preload :6 // Prescaler :4 // Interrupt time :1,0000mS LAMPEGGIO LED TRAMITE TIMER INTERRUPT - PARTE 4 3

// OPTION // bit 0 -> PS0 Prescaler Rate Select bit 0 // bit 1 -> PS1 Prescaler Rate Select bit 1 // bit 2 -> PS2 Prescaler Rate Select bit 2 // bit 3 -> PSA Prescaler assegnato a Timer0 (1=Watchdog Timer) // bit 4 -> T0SE Timer0 Signal Edge: 0=low->high 1=high->low // bit 5 -> T0CS Timer0 Clock Select: internal clock (1=T0CKI transition) // bit 6 -> INTEDG INTerrupt Edge (1=raise 0=fall) // bit 7 -> RBPU PortB PullUp (0=off 1=on) OPTION_REG = 0b00000001; //IMPOSTARE INTERRUPT // INTCON // bit 0 -> RBIF PortB Interrupt Flag // bit 1 -> INTF RB0/INT Interrupt Flag // bit 2 -> T0IF Timer0 Interrupt Flag // bit 3 -> RBIE PortB Interrupt Enable (off) // bit 4 -> INTE INT Interrupt Enable (off) // bit 5 -> TMR0IE Timer0 Interrupt Enable (on) // bit 6 -> PEIE PEripheral Interrupt Enable (off) // bit 7 -> GIE Global Interrupt Enable (on) INTCON = 0b10100000; //PRECARICARE IL TIMER // Preload Timer0 // TMR0=8; // valore con correzione TMR0 = 8; // con correzione while (1) { //ROUTINE DI INTERRUPT void interrupt isr(void) { //CONTROLLO SORGENTE INTERRUPT TIMER0 OVERFLOW if (T0IF) { //REIMPOSTAZIONE DEL PRECARIMENTO TIMER0 LAMPEGGIO LED TRAMITE TIMER INTERRUPT - PARTE 4 4

TMR0 = 8; //INCREMENTO VARIABILE TEMPO E CONTROLLO VALORE //CON INVERSIONE STATO LED ED AZZERAMENTO TEMPO Tempo++; if (Tempo >= TempoLampeggio) { Led =!Led; Tempo = 0; //AZZERAMENTO TIMER0 OVERFLOW T0IF = 0; Conclusioni In questo articolo ho cercato di massimizzare il coinvolgimento del lettore condividendo il ragionamento, frammentando al massimo i passaggi teorici sperando che il lettore possa comprendere, e fare suo, il metodo di studio e soluzione. Estratto da "http://www.electroyou.it/mediawiki/ index.php?title=userspages:ildani:parte-4" LAMPEGGIO LED TRAMITE TIMER INTERRUPT - PARTE 4 5