__delay_ms(1000) sembra non funzionare

  • Lello Guidi
  • Autore della discussione
  • Platino Utente
  • Platino Utente
Di più
5 Anni 5 Mesi fa - 5 Anni 5 Mesi fa #1 da Lello Guidi
__delay_ms(1000) sembra non funzionare è stato creato da Lello Guidi
Lo scopo del seguente listato è quello che superata una certa tensione in ingresso ad "AN3" mi attiva un relè e lo tiene attratto per 10 secondi visualizzando con un led lo scorrere del tempo.
I minutri vengono scanditi con l'istruzione "__delay_ms(1000)".
Il listato è il seguente:
Code:
/***************************************** * main.c * pic 12F675 * MPLAB X IDE 4.01 e XC8 1.45 * 19 novembre 2019 [attachment=1586]ADC_Functions.c[/attachment] * * Configurazione pin: * GP0 = Led * GP2 = Rele * GP4 = (AN3) ADC input *****************************************/ #include <xc.h> #include "ADC_Functions.h" #pragma config FOSC = INTRCIO #pragma config WDTE = OFF #pragma config PWRTE = OFF #pragma config MCLRE = OFF #pragma config BOREN = ON #pragma config CP = OFF #pragma config CPD = OFF #define _XTAL_FREQ 4000000 #define Led GPIObits.GP0 #define Rele GPIObits.GP2 void main() { unsigned int ADC_value = 0; InitADC(AN3); while(1) { ADC_value = GetADCValue(AN3); if (ADC_value > 512) // valore preso a caso per il test { Rele = 1; // led rosso for(int a = 10; a < 0; a -- ){ __delay_ms(500); Led = 0; // led blu //Led = Led^1; __delay_ms(500); Led = 1; // led blu } } Rele = 0; // led rosso Led = 0; // led blu __delay_ms(500); } }
Variando la tensione da 0 a 5 volt in ingresso con un potenziometro da 100K non succede niente.
Quello che succede è che il led è acceso fisso, cosi come il rele che è attratto.
Non vedo scorrere i secondi e il circuito tornare a riposo dopo i 10 secondi.

File allegato:

Nome del file: ADC_Functions.c
Dimensione del file:2 KB


Saluti

Lello
Allegati:
Ultima Modifica 5 Anni 5 Mesi fa da Lello Guidi. Motivo: Aggiunta del file di configurazione

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Cosimix
  • Elit Utente
  • Elit Utente
Di più
5 Anni 5 Mesi fa #2 da Cosimix
Risposta da Cosimix al topic __delay_ms(1000) sembra non funzionare
Salve!

Perdona la banalità.. prima di esaminare il codice, assicurati che il potenziometro sia collegato correttamente (e che funzioni correttamente controllandolo con un multimetro).

Saluti,
Cosimo

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
5 Anni 5 Mesi fa #3 da Mauro Laurenti
Risposta da Mauro Laurenti al topic __delay_ms(1000) sembra non funzionare
Presupponendo collegamenti corretti, un paio di problemi software ci sono.

Non inizializzi il registro TRIS per ingressi e uscite.
Nel caso del tuo PIC o sono ingresso di Default o causale...che è male...e può essere input.
Inoltre i resistori di pull-up interni sono attivi di default.

Tradotto in altri termini:

Non hai controllo sulle uscite perché non le hai impostate.
Quindi il LED non lampeggia.

...e ancor peggio il resistore di pull-up ti accende sia il LED che il relay.

Saluti,

Mauro

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Lello Guidi
  • Autore della discussione
  • Platino Utente
  • Platino Utente
Di più
5 Anni 5 Mesi fa #4 da Lello Guidi
Risposta da Lello Guidi al topic __delay_ms(1000) sembra non funzionare
Se non ci foste voi che mi date un aiuto e mi date la possibilità di imparare, sarei a terra!
Grazie

Lello

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Cosimix
  • Elit Utente
  • Elit Utente
Di più
5 Anni 5 Mesi fa #5 da Cosimix
Risposta da Cosimix al topic __delay_ms(1000) sembra non funzionare
Che embedded world sarebbe senza Laurtec? :)

Funziona adesso?

Saluti,
Cosimo

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Forum - Ultimi messaggi