Vai al contenuto
PLC Forum


Pic16F Con Programma In C


Alessandro Dj-alex Turco

Messaggi consigliati

Alessandro Dj-alex Turco

#programma1

unsigned char num; // numero da visualizzare

//array con la codifica per i display
unsigned char DISPLAY[10] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111};

void main(){
TRISA=0;
TRISB=0;
num=0;
for(;; ){
if(num==10)
num=0;
PORTB=DISPLAY[num];
num++;
Delay_ms(1000);
}
}

6901dc0c665b65dd2341109d001c142f.PNG

GLI ERRORI DEL PROGRAMMA DA TE POSTATO

Modificato: da Alessandro Dj-alex Turco
Link al commento
Condividi su altri siti


  • Risposte 66
  • Created
  • Ultima risposta

Top Posters In This Topic

  • Alessandro Dj-alex Turco

    36

  • simuffa

    13

  • Livio Orsini

    12

  • giacomo56

    2

Alessandro Dj-alex Turco
#programma2
// #include <p16f84.h>
#define BTN1 RA0 // pulsante PIU
#define BTN2 RA1 // pulsante MENO
#define a RB0 // led A_1
#define b RB1 // led B_2
#define c RB2 // led C_3
#define d RB3 // led D_4
#define e RB4 // led E_5
#define f RB5 // led F_6
#define g RB6 // led G_7
void LedAcceso(int n)
{
switch(n)
{
case 0:
PORTAbits.RB0=1;
PORTAbits.RB1=1;
PORTAbits.RB2=1;
PORTAbits.RB3=1;
PORTAbits.RB4=1;
PORTAbits.RB5=1;
PORTAbits.RB6=0;
break;
case 1:
PORTAbits.RB0=0;
PORTAbits.RB1=1;
PORTAbits.RB2=1;
PORTAbits.RB3=0;
PORTAbits.RB4=0;
PORTAbits.RB5=0;
PORTAbits.RB6=0;
break;
case 2:
PORTAbits.RB0=1;
PORTAbits.RB1=1;
PORTAbits.RB2=0;
PORTAbits.RB3=1;
PORTAbits.RB4=1;
PORTAbits.RB5=0;
PORTAbits.RB6=1;
break;
case 3:
PORTAbits.RB0=1;
PORTAbits.RB1=1;
PORTAbits.RB2=1;
PORTAbits.RB3=1;
PORTAbits.RB4=0;
PORTAbits.RB5=0;
PORTAbits.RB6=1;
break;
case 4:
PORTAbits.RB0=0;
PORTAbits.RB1=1;
PORTAbits.RB2=1;
PORTAbits.RB3=0;
PORTAbits.RB4=0;
PORTAbits.RB5=1;
PORTAbits.RB6=1;
break;
case 5:
PORTAbits.RB0=1;
PORTAbits.RB1=0;
PORTAbits.RB2=1;
PORTAbits.RB3=1;
PORTAbits.RB4=0;
PORTAbits.RB5=1;
PORTAbits.RB6=1;
break;
case 6:
PORTAbits.RB0=1;
PORTAbits.RB1=0;
PORTAbits.RB2=1;
PORTAbits.RB3=1;
PORTAbits.RB4=1;
PORTAbits.RB5=1;
PORTAbits.RB6=1;
break;
case 7:
PORTAbits.RB0=1;
PORTAbits.RB1=1;
PORTAbits.RB2=1;
PORTAbits.RB3=0;
PORTAbits.RB4=0;
PORTAbits.RB5=0;
PORTAbits.RB6=0;
break;
case 8:
PORTAbits.RB0=1;
PORTAbits.RB1=1;
PORTAbits.RB2=1;
PORTAbits.RB3=1;
PORTAbits.RB4=1;
PORTAbits.RB5=1;
PORTAbits.RB6=1;
break;
case 9:
PORTAbits.RB0=1;
PORTAbits.RB1=1;
PORTAbits.RB2=1;
PORTAbits.RB3=1;
PORTAbits.RB4=0;
PORTAbits.RB5=1;
PORTAbits.RB6=1;
break;
}
};
void loop ()
{
for (int n=0;n<10;n++)
{
LedAcceso(n);
delay (1000);
}
}
void main()
{
/* Insert your code here. */
}
>>>>> NON VA DOVE HO SBAGLIATO
io vorrei capire anche perche non va questo

  • #programma1
  • #programma2
Modificato: da Alessandro Dj-alex Turco
Link al commento
Condividi su altri siti

nel main richiama la funzione loop

void main()

{
/* Insert your code here. */
loop();
}

devi sostituire PORTAbits con PORTBbits perché stai usando la porta b

le istruzioni trisa e trisb definiscono se le porte a o le b sono di ingresso o uscita

devi scrivere questo all'inizio del (mio) programma

#include "pic.h"

Modificato: da simuffa
Link al commento
Condividi su altri siti

io ti consiglio di provare prima con questo:

#include<pic.h> 

main(void) 
{ 
     TRISB = 0x00; // set PortB as out
     PORTB = 0b00000010; // set PortB bit1 = 1
} 
 

se funziona e si accende un segmento del display analizziamo il tuo

Link al commento
Condividi su altri siti

#include<pic.h>
flg_loop = 0;
main(void) 
{
   while (true);
    {
     TRISB = 0x00; // set PortB as out
     PORTB = 0b00000010; // set PortB bit1 = 1
    }
} 

L'istruzione while (true) esegue la stessa funzione della funzione "Loop" di arduino, in cui scrivi lo sketch applicativo. le istruzioni racchiuse tra le grafe son ripetute all'infinito.

La sintassi può essere leggermente differente in funzione del compilatore usato.

Link al commento
Condividi su altri siti

Alessandro Dj-alex Turco
#include<pic.h>
main(void)
{
TRISB = 0x00; // set PortB as out
PORTB = 0b00000010; // set PortB bit1 = 1
}
il display non fa nulla
Link al commento
Condividi su altri siti

Scusa ma almeno una misura dell'uscita la vogliamo fare?

COn questo programma, anche se ripetuto una sola volta, l'usicta B!1 del pic deve essere alta.

Quindi verificare se questo avviente, poi verificare se con quell'uscita alta il display deve illumare qaulche segmento.

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

Alessandro Dj-alex Turco

Ho aggiunto dei led prima delle resistenze e con quel programma le uscite sono sempre accese perciò alte ma il dislay non fa nulla

Link al commento
Condividi su altri siti

Buona sera a tutti !

Ho aggiunto dei led prima delle resistenze e con quel programma le uscite sono sempre accese perciò alte ma il dislay non fa nulla

Scusami . siamo sicuri di avere un display catodo comune ? e se SI , il suo catodo è collegato allo stesso negativo (massa)?

Chiedo scusa se in precedenza avevi nominato il tipo del ''U2'' , mi sarà sfuggito . :thumb_yello:

Ma l' U2 è ''sano'' ?

Link al commento
Condividi su altri siti

Alessandro Dj-alex Turco
#include<pic.h>
//#include <p16f84.h>
#define BTN1 RA0 // pulsante PIU
#define BTN2 RA1 // pulsante MENO
#define a RB0 // led A_1
#define b RB1 // led B_2
#define c RB2 // led C_3
#define d RB3 // led D_4
#define e RB4 // led E_5
#define f RB5 // led F_6
#define g RB6 // led G_7
void main()
{
TRISA=1;
TRISB=1;
void LedAcceso(int n)
{
switch(n)
{
case 0:
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=1;
PORTBbits.RB6=0;
break;
case 1:
PORTBbits.RB0=0;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=0;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=0;
break;
case 2:
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB2=0;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=0;
PORTBbits.RB6=1;
break;
case 3:
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=1;
break;
case 4:
PORTBbits.RB0=0;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=0;
PORTBbits.RB4=0;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
break;
case 5:
PORTBbits.RB0=1;
PORTBbits.RB1=0;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=0;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
break;
case 6:
PORTBbits.RB0=1;
PORTBbits.RB1=0;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
break;
case 7:
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=0;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=0;
break;
case 8:
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
break;
case 9:
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=0;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
break;
}
};
void loop ()
{
for (int n=0;n<10;n++)
{
LedAcceso(n);
delay (1000);
}
}
}
9b9a303fbc99b103c17dced67d2e34f1.PNG
2255c822318177edfd45a898da0553dc.PNG
4ff11c970c55b1f99111797db68b976d.PNG
Modificato: da Alessandro Dj-alex Turco
Link al commento
Condividi su altri siti

Non si può definire una funzione dentro un'altra, in questo caso void LedAcceso(int n) dentro a main().

Devi scrivere

void LedAcceso(int n)

{

...

}

void main()

{

...

LedAcceso(n);

...

}

Ciao.

Link al commento
Condividi su altri siti

E' inutile continuare a mettere listati e schemi.

Da tutto quanto hai scritto sino ad ora si deduce che:

  • Conosci poco o nulla dei PIC
  • Conosci quasi niente del "C".

Cercare di fare qualche cosa senza sapere quello che si sta facendo è solo una perdita di tempo.

lavorare con un micro, anche semplicissimo, come quello che stai usando è molto differente dal fare qualche giochino, tipo accendi e spegni un LED, con arduino. Li c'è tutto pronto, funzionanete e già fatto e collaudato.

Se vuoi lavorare con i micro, prima devi capire e sapere come lavorano (potresti leggerti l'ottimo tutorial si Sergio Tanzilli); poi, se vuoi lavorare in "C", tidevi studiare il lingiaggio.

Non ci sono scorciatoie, le cose per impararle vanno studiate dedicandoci tempo e fatica. La scienza infusa non esiste.

Link al commento
Condividi su altri siti

Alessandro Dj-alex Turco
  il programma sottostante non da errori ma non va il display
#include<pic.h> 
//#include <p16f84.h>
 
#define BTN1    RA0    // pulsante PIU
#define BTN2    RA1    // pulsante MENO
#define a       RB0    // led A_1
#define b   RB1    // led B_2
#define c   RB2    // led C_3
#define d   RB3    // led D_4
#define e   RB4    // led E_5
#define f   RB5    // led F_6
#define g   RB6    // led G_7
 

void LedAcceso(int n)
{
switch(n)
{
case 0:
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=1;
PORTBbits.RB6=0;
break;
 
case 1:
PORTBbits.RB0=0;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=0;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=0;
break;
 
case 2:
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB2=0;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=0;
PORTBbits.RB6=1;
break;
 
case 3:
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=1;
break;
 
case 4:
PORTBbits.RB0=0;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=0;
PORTBbits.RB4=0;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
break;
 
case 5:
PORTBbits.RB0=1;
PORTBbits.RB1=0;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=0;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
break;
 
case 6:
PORTBbits.RB0=1;
PORTBbits.RB1=0;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
break;
 
case 7:
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=0;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=0;
break;
 
case 8:
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
break;
 
case 9:
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=0;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
break;
}
};
 

void main()
{
TRISA=1;
TRISB=1;
}
 
void loop ()
{
for (int n=0;n<10;n++) 
{
LedAcceso(n);

}
} 
 

il programma sottostante ho aggiunto trisa e trisb all' interno del main

non da errori ma non va il display

#include<pic.h> 
//#include <p16f84.h>
 
#define BTN1    RA0    // pulsante PIU
#define BTN2    RA1    // pulsante MENO
#define a       RB0    // led A_1
#define b   RB1    // led B_2
#define c   RB2    // led C_3
#define d   RB3    // led D_4
#define e   RB4    // led E_5
#define f   RB5    // led F_6
#define g   RB6    // led G_7
 

void LedAcceso(int n)
{
switch(n)
{
case 0:
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=1;
PORTBbits.RB6=0;
break;
 
case 1:
PORTBbits.RB0=0;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=0;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=0;
break;
 
case 2:
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB2=0;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=0;
PORTBbits.RB6=1;
break;
 
case 3:
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=1;
break;
 
case 4:
PORTBbits.RB0=0;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=0;
PORTBbits.RB4=0;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
break;
 
case 5:
PORTBbits.RB0=1;
PORTBbits.RB1=0;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=0;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
break;
 
case 6:
PORTBbits.RB0=1;
PORTBbits.RB1=0;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
break;
 
case 7:
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=0;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=0;
break;
 
case 8:
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
break;
 
case 9:
PORTBbits.RB0=1;
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=0;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
break;
}
};
 

void main()
{
TRISA=0x30;
TRISB=0x00;
PORTB=0x00;
}
 
void loop ()
{
for (int n=0;n<10;n++) 
{
LedAcceso(n);

}
} 

questo programma e' la gestione di un pulsante per accendere un led (fatto da me) , come faccio ad applicarlo al progetto del display ///ho gia' inizializzato la variabile led1 e pulsante

while (1) 
{if (pulsante == 0)
{ 
led1=1;
}
else
{
led1=0;
} 

}

Modificato: da Alessandro Dj-alex Turco
Link al commento
Condividi su altri siti

non so più come dirtelo... se non richiami la funzione loop dal main il tuo programma non farà mai niente.. l'unica funzione che parte è il main..

la funzione loop se non la richiami non parte MAI! te l'ho scritto io, Livio e anche giacomo56 dentro il main devi scrivere loop(); dentro un ciclo che la richiama per sempre

quando avrai imparato ad accendere un led ti aiuto/aiutiamo a fare andare il tuo programma

ma se non sai fare accendere un led il tuo programma non andrà mai..

chi sa se è un problema del circuito o del programma? sei sicuro che il circuito funziona?

Modificato: da simuffa
Link al commento
Condividi su altri siti

Alessandro Dj-alex Turco

An scusa non avevo capito

come faccio ad richiamare loop() nel main perche' se lo inserisco nel main mi da errore il compilatore

Link al commento
Condividi su altri siti

Alessandro Dj-alex Turco

TRISA=1b11111111; //tutte ingresso

TRISB=0b00000000; //metto tutte come uscite

PORTA=0;
PORTB=0;

Modificato: da Alessandro Dj-alex Turco
Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora

×
×
  • Crea nuovo/a...