Jump to content
PLC Forum


Sign in to follow this  
Alessandro Dj-alex Turco

Pic16F Con Programma In C

Recommended Posts

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

Edited by Alessandro Dj-alex Turco

Share this post


Link to post
Share on other sites

simuffa

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

Share this post


Link to post
Share on other sites
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
Edited by Alessandro Dj-alex Turco

Share this post


Link to post
Share on other sites
simuffa

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"

Edited by simuffa

Share this post


Link to post
Share on other sites
Alessandro Dj-alex Turco

Perché?

Scrivetemi come verrebbe il programma funzionante

Share this post


Link to post
Share on other sites
simuffa

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

Share this post


Link to post
Share on other sites
Alessandro Dj-alex Turco

Ok proverò e ti saprò dire

Share this post


Link to post
Share on other sites
Livio Orsini
#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.

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
Livio Orsini

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.

Edited by Livio Orsini

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
gabri-z

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

Share this post


Link to post
Share on other sites
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
Edited by Alessandro Dj-alex Turco

Share this post


Link to post
Share on other sites
giacomo56

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.

Share this post


Link to post
Share on other sites
Livio Orsini

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.

Share this post


Link to post
Share on other sites
Alessandro Dj-alex Turco

Ok proverò

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

Share this post


Link to post
Share on other sites
dott.cicala

li ho fatti ha scuola con voti abbastanza alti

.....emblematica

Share this post


Link to post
Share on other sites
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;
} 

}

Edited by Alessandro Dj-alex Turco

Share this post


Link to post
Share on other sites
simuffa

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?

Edited by simuffa

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
Alessandro Dj-alex Turco

TRISA=1b11111111; //tutte ingresso

TRISB=0b00000000; //metto tutte come uscite

PORTA=0;
PORTB=0;

Edited by Alessandro Dj-alex Turco

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...