Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Due PWM con 16F877

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[11] Re: Due PWM con 16F877

Messaggioda Foto UtentePaolino » 17 mar 2011, 22:49

Nel tutorial sulla conversione A/D è spiegato come considerare tanti aspetti tra cui la Fosc e l'impedenza della sorgente analogica. Puoi fornire questi valori?

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[12] Re: Due PWM con 16F877

Messaggioda Foto UtenteTardoFreak » 17 mar 2011, 23:10

Non so che compilatore usi ma quest' istruzione
Codice: Seleziona tutto
      while(ADGO)
      continue; //Attende che la conversione sia completa

Dovrebbe esssere scritta cosi':
Codice: Seleziona tutto
      while(ADGO);  //Attende che la conversione sia completa
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[13] Re: Due PWM con 16F877

Messaggioda Foto UtenteLucaScia » 18 mar 2011, 0:47

Uso MPLAb IDE v8.5
Il codice che posto e' quello usato per testare il convertitore A/D con due potenziometri e funziona correttamente...
Codice: Seleziona tutto
/*
* programma A/D con due potenziometri su AN0 e AN1
*/
#include <PIC.h>
#include <stdio.h>
#include "delay.c"
int main(void)
{
   int ang, ang1;

   TRISA=0b00101111; // Tutte le Porte A analogiche come uscite
   TRISD=0;//Porte D come uscite
   PORTD=0;//Porte D tutte a zero
   TRISC=0;//Porte C come uscite
   PORTC=0;//Porte C tutte a zero

   ADCON0 = 0b10000001; //attiva porte analogiche con 32tosc e lettura su AN0
   ADCON1= 0b10000000;

   while(1)
   {
      CHS0=0; // seleziona la porta da leggere (AN0) 
      DelayUs(20); //ritardo per il cambio porta analogica      
      ADGO = 1; //Fa partire la conversione
      while(ADGO)
      continue; //Attende che la conversione sia completa
      ang = ADRESL+(ADRESH<<8); // risultato a 10 bit
      if(ang>=511) //se e' maggiore uguale alla metà del valore possibile
      {
         RD0=1;//accendi i led su RD0 e RC1
         RC1=1;
      }
      else //se e' minore della metà allora spegni i led
      {
         RD0=0;
         RC1=0;
      }

      CHS0=1; //seleziona la porta da leggere (AN1)
      DelayUs(20); //ritardo per il cambio porta analogica
      ADGO = 1; //Fa partire la conversione
      while(ADGO)
      continue; //Attende che la conversione sia completa
      ang1 = ADRESL+(ADRESH<<8); // risultato a 10 bit
      
      if(ang1>=511) //se e' maggiore uguale alla metà del valore possibile
      {
         RD1=1; //Accendi i led su RD1 e RC2
         RC2=1;
      }
      else //se e' minore della metà allora spegni i led
      {
         RD1=0;
         RC2=0;
      }
   }
}

Ovviamente su AN0 AN1 ci sono due potenziometri diversi! ;-)
PS uso un quarzo da 20 MHz
Avatar utente
Foto UtenteLucaScia
10 1 2
 
Messaggi: 34
Iscritto il: 26 ott 2010, 13:32

0
voti

[14] Re: Due PWM con 16F877

Messaggioda Foto UtenteTardoFreak » 18 mar 2011, 1:17

Tu fai come vuoi ma una continue dentro il ciclo while(1) non fa altro che far continuare l' iterazione del ciclo. L' ambiguita' sta nel fatto che operi sul ciclo while(ADGO) o no.
Poi, per carita', se sei sicuro di quello che fai vai pure avanti cosi'.
Io mi ritiro in buon' ordine.

Pero' mi piacerebbe ancora sapere quale COMPILATORE C usi.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[15] Re: Due PWM con 16F877

Messaggioda Foto UtenteLucaScia » 18 mar 2011, 1:27

Ehm Ho già risposto MPLAB IDE v 8.5 della Microchip
Comunque ho anche provato senza il continue ed e' lo stesso risultato...del resto l'ho usato anche perché studio informatica e me l'hanno insegnata come cosa plausibile...
Avatar utente
Foto UtenteLucaScia
10 1 2
 
Messaggi: 34
Iscritto il: 26 ott 2010, 13:32

0
voti

[16] Re: Due PWM con 16F877

Messaggioda Foto UtentePaolino » 18 mar 2011, 9:17

LucaScia ha scritto:Ehm Ho già risposto MPLAB IDE v 8.5 della Microchip

Ehm, veramente no, non hai risposto! Dire infatti che usi MPLAB IDE 8.5 non significa proprio nulla! Infatti in quell'IDE ci possono stare, senza troppi problemi, diversi COMPILATORI C! Giusto qualcuno:
- CCS C compiler;
- SourceBoost;
- HiTech C.

Quindi la domanda di Tardofreak è più che pertinente ;-)

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[17] Re: Due PWM con 16F877

Messaggioda Foto UtenteLucaScia » 18 mar 2011, 9:32

Oooops Scusate non sapevo ce ne fossero tanti... :roll: quindi pensavo di aver già risposto...
Uso l'Hi-Tech C!
Grazie
Avatar utente
Foto UtenteLucaScia
10 1 2
 
Messaggi: 34
Iscritto il: 26 ott 2010, 13:32

0
voti

[18] Re: Due PWM con 16F877

Messaggioda Foto UtentePaolino » 18 mar 2011, 10:11

LucaScia ha scritto:PS uso un quarzo da 20 MHz

Scusa, ma hai detto PIC16F877 oppure PIC16F877-20?

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[19] Re: Due PWM con 16F877

Messaggioda Foto UtenteLucaScia » 18 mar 2011, 11:19

PIC 16F877 semplicemente!
Avatar utente
Foto UtenteLucaScia
10 1 2
 
Messaggi: 34
Iscritto il: 26 ott 2010, 13:32

0
voti

[20] Re: Due PWM con 16F877

Messaggioda Foto UtentePaolino » 18 mar 2011, 11:30

Allora forse il problema risiede lì! Il PIC16F877 (immagino ci sia anche un "-04" a seguire) lavora fino a 4MHz. Se vuoi andare a 20MHz serve il PIC16F877-20

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

PrecedenteProssimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti