Vai al contenuto
PLC Forum


Pic16F Con Programma In C


Messaggi consigliati

Alessandro Dj-alex Turco
Inserita: (modificato)

#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

  • Risposte 66
  • Created
  • Ultima risposta

Top Posters In This Topic

  • Alessandro Dj-alex Turco

    36

  • simuffa

    13

  • Livio Orsini

    12

  • giacomo56

    2

Inserita:

ahah questa è un'altra questione.. tu hai detto che non faceva niente non che dava errori :)

Alessandro Dj-alex Turco
Inserita: (modificato)
#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
Inserita: (modificato)

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
Alessandro Dj-alex Turco
Inserita:

Perché?

Scrivetemi come verrebbe il programma funzionante

Inserita:

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

Alessandro Dj-alex Turco
Inserita:

Ok proverò e ti saprò dire

Inserita:
#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.

Alessandro Dj-alex Turco
Inserita:
#include<pic.h>
main(void)
{
TRISB = 0x00; // set PortB as out
PORTB = 0b00000010; // set PortB bit1 = 1
}
il display non fa nulla
Inserita: (modificato)

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
Alessandro Dj-alex Turco
Inserita:

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

Inserita:

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'' ?

Alessandro Dj-alex Turco
Inserita:

non ho capito

Alessandro Dj-alex Turco
Inserita: (modificato)
#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
Inserita:

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.

Inserita:

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.

Alessandro Dj-alex Turco
Inserita:

Ok proverò

Ma so cosa sono e come lavorano li ho fatti ha scuola con voti abbastanza alti

Inserita:

li ho fatti ha scuola con voti abbastanza alti

.....emblematica

Alessandro Dj-alex Turco
Inserita: (modificato)
  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
Inserita: (modificato)

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
Alessandro Dj-alex Turco
Inserita:

An scusa non avevo capito

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

Alessandro Dj-alex Turco
Inserita: (modificato)

TRISA=1b11111111; //tutte ingresso

TRISB=0b00000000; //metto tutte come uscite

PORTA=0;
PORTB=0;

Modificato: da Alessandro Dj-alex Turco

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...