Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Super Car 8 LED

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[11] Re: Super Car 8 LED

Messaggioda Foto UtenteCseven » 6 giu 2014, 23:02

wow a prima vista, è cambiato tutto e di molto.

non ci capisco più un tubo a essere sincero :D :D

attualmente uso windows, prima ero su Ubuntu, ma proprio per il fatto dei picmicro e altri software che usavo ho lasciato ubuntu per windows.

poi ho avuto altri problemi di compatibilità ecc, e ho lasciato stare ubuntu.


Guarda, Mplab non vuole compilarlo per niente.
Non so come mai tutte queste stringhe per accendere dei led in sequenza da 0 a 7 per poi ripartire di nuovo dal bit 0.

Non sarebbe più facile con uno shift ?
Avatar utente
Foto UtenteCseven
25 3 6
Frequentatore
Frequentatore
 
Messaggi: 284
Iscritto il: 25 apr 2009, 18:27
Località: Tv

1
voti

[12] Re: Super Car 8 LED

Messaggioda Foto Utenteposta10100 » 6 giu 2014, 23:18

Cseven ha scritto:ho lasciato ubuntu per windows.

Solo per questo meriteresti di non essere aiutato :lol:

Cseven ha scritto:Non sarebbe più facile con uno shift ?

Se guardi non fa ne più ne meno che questo, a parte tutta la parte iniziale che serve per configurare i registri del PIC, poi nel main si limita a far shiftare i bit giocando con la lookup table che ha dichiarato prima.
Immagino che quel pezzo di codice sia stato scritto come esempio per mostrare l'uso degli array o qualcosa di simile.
Prova a riscriverlo senza lookup table, non è niente di complicato!

Cseven ha scritto:Guarda, Mplab non vuole compilarlo per niente.

Mplab non può compilare quel codice, a meno che tu non utilizzi SDCC come compilatore.

O_/
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)

Strumento per formule
Avatar utente
Foto Utenteposta10100
5.550 4 10 13
Master EY
Master EY
 
Messaggi: 4832
Iscritto il: 5 nov 2006, 0:09

0
voti

[13] Re: Super Car 8 LED

Messaggioda Foto UtenteCseven » 7 giu 2014, 10:51

Ciao posta.

sai prima di capire quello che ha fatto la microchip, preferirei capire come , dove e perché non riesco a ottenere una striscia LED da 0 a 8 accesi dal primo all'ultimo.

Funzionamento dettagliato:

Si accende il primo led, poi si spegne con imediata accensione del secondo e via dicendo fino all'ottavo LED .

Arrivato all'ottavo LED, dopo il suo spegnimento, riparte il primo LED e via cosi all'infinito.

Io ho fatto questo:

Codice: Seleziona tutto

/** C O N F I G U R A T I O N   B I T S **/

#pragma config FOSC = INTIO67, FCMEN = OFF, IESO = OFF                       // CONFIG1H
#pragma config PWRT = OFF, BOREN = SBORDIS, BORV = 30                        // CONFIG2L
#pragma config WDTEN = OFF, WDTPS = 32768                                     // CONFIG2H
#pragma config MCLRE = OFF, LPT1OSC = OFF, PBADEN = ON, CCP2MX = PORTC       // CONFIG3H
#pragma config STVREN = ON, LVP = OFF, XINST = OFF                          // CONFIG4L
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF                   // CONFIG5L
#pragma config CPB = OFF, CPD = OFF                                         // CONFIG5H
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF               // CONFIG6L
#pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF                           // CONFIG6H
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF           // CONFIG7L
#pragma config EBTRB = OFF                                                  // CONFIG7H


/** Librerie **/
#include "p18f46k20.h"
#include "delays.h"


void main (void)
{
    TRISD = 0b00000000;        // i bit della porta D sono tutti uscite

    while (1){

        for(LATD=0b00000000;LATD<=0b10000000;LATD++)
    {
             
        LATD = LATD << 1;
        Delay1KTCYx(100);
    }            }
}



e non riesco a capire dove sbaglio. Mi puoi aiutare? Grazie.
Avatar utente
Foto UtenteCseven
25 3 6
Frequentatore
Frequentatore
 
Messaggi: 284
Iscritto il: 25 apr 2009, 18:27
Località: Tv

0
voti

[14] Re: Super Car 8 LED

Messaggioda Foto Utenteposta10100 » 7 giu 2014, 10:55

Cseven ha scritto:non riesco a capire dove sbaglio. Mi puoi aiutare?

Cosa non va con il tuo codice? Riesci a programmare il PIC?
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)

Strumento per formule
Avatar utente
Foto Utenteposta10100
5.550 4 10 13
Master EY
Master EY
 
Messaggi: 4832
Iscritto il: 5 nov 2006, 0:09

0
voti

[15] Re: Super Car 8 LED

Messaggioda Foto UtenteCseven » 7 giu 2014, 20:10

Si , riesco a programarlo, ma si accende partendo dal 2° led e man mano che si accendono rimangono accesi quelli dietro, mentre io voglio che man mano che vada avanti l'esecuzione del programma accenda i led con dopo lo spegnimento ( in base al delay ) di esso accendendo il prossimo led e via cosi...

Non so, forse la mia spiegazione fa schifo. Dimmi se non hai capito cosa voglio ottenere...

Non riesco a capire dove sbaglio e perché non riesco a ottenere questo.

Nel ciclo for ho inserito il led '0' come partenza dopodiché incrementa shiftando il bit a sinistra , quindi il led che rimane ''indietro'' dovrebbe spegnersi... come mai ciò non accade?
Avatar utente
Foto UtenteCseven
25 3 6
Frequentatore
Frequentatore
 
Messaggi: 284
Iscritto il: 25 apr 2009, 18:27
Località: Tv

0
voti

[16] Re: Super Car 8 LED

Messaggioda Foto UtenteCseven » 9 giu 2014, 13:36

posta10100 ha scritto:
Cseven ha scritto:non riesco a capire dove sbaglio. Mi puoi aiutare?

Cosa non va con il tuo codice? Riesci a programmare il PIC?


Ti mostro quello che vorrei cercare di fare , in maniera più veloce.

Codice: Seleziona tutto
#pragma config FOSC = INTIO67, FCMEN = OFF, IESO = OFF                       // CONFIG1H
#pragma config PWRT = OFF, BOREN = SBORDIS, BORV = 30                        // CONFIG2L
#pragma config WDTEN = OFF, WDTPS = 32768                                     // CONFIG2H
#pragma config MCLRE = OFF, LPT1OSC = OFF, PBADEN = ON, CCP2MX = PORTC       // CONFIG3H
#pragma config STVREN = ON, LVP = OFF, XINST = OFF                          // CONFIG4L
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF                   // CONFIG5L
#pragma config CPB = OFF, CPD = OFF                                         // CONFIG5H
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF               // CONFIG6L
#pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF                           // CONFIG6H
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF           // CONFIG7L
#pragma config EBTRB = OFF                                                  // CONFIG7H


/** I N C L U D E S **************************************************/
#include "p18f46k20.h"
#include "delays.h"


void main (void)
{
    TRISD = 0;        // i bit della porta D sono tutte Output (0)

    while (1){
        LATDbits.LATD0 = 1;
        Delay1KTCYx(100);
        LATDbits.LATD0 = 0;

        LATDbits.LATD1 = 1;
        Delay1KTCYx(100);
        LATDbits.LATD1 = 0;

        LATDbits.LATD2 = 1;
        Delay1KTCYx(100);
        LATDbits.LATD2 = 0;

        LATDbits.LATD3 = 1;
        Delay1KTCYx(100);
        LATDbits.LATD3 = 0;

        LATDbits.LATD4 = 1;
        Delay1KTCYx(100);
        LATDbits.LATD4 = 0;

        LATDbits.LATD5 = 1;
        Delay1KTCYx(100);
        LATDbits.LATD5 = 0;

        LATDbits.LATD6 = 1;
        Delay1KTCYx(100);
        LATDbits.LATD6 = 0;

        LATDbits.LATD7 = 1;
        Delay1KTCYx(100);
        LATDbits.LATD7 = 0;

    }
}


Come potrei ottimizzare il codice ? Sto cercando la strada più corta per arrivare allo stesso risultato.
Avatar utente
Foto UtenteCseven
25 3 6
Frequentatore
Frequentatore
 
Messaggi: 284
Iscritto il: 25 apr 2009, 18:27
Località: Tv

1
voti

[17] Re: Super Car 8 LED

Messaggioda Foto Utenteposta10100 » 9 giu 2014, 17:36

Cseven ha scritto: Sto cercando la strada più corta per arrivare allo stesso risultato.

Un passo per volta.
Hai compilato il programma e lo hai caricato nel PIC? Funziona?

Così, a sentimento, io implementerei un for con uno shift tutto in un ciclo while infinito.
Codice: Seleziona tutto
while (1) {
  LATDbits = 1;
  for (int i = 0; i < 8; i++) {
    LATDbits = LATDbits << 1;
  }
}

Poi bisogna vedere come la prende il compilatore, non è detto che il mio codice sia più compatto del tuo.
Fai una prova, se vuoi, per vedere quale richiede più risorse.

O_/
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)

Strumento per formule
Avatar utente
Foto Utenteposta10100
5.550 4 10 13
Master EY
Master EY
 
Messaggi: 4832
Iscritto il: 5 nov 2006, 0:09

0
voti

[18] Re: Super Car 8 LED

Messaggioda Foto UtenteCseven » 11 giu 2014, 13:58

posta10100 ha scritto:Hai compilato il programma e lo hai caricato nel PIC? Funziona?


Si, funziona .

Ma ora ho 2 domande:

Perché hai scritto LATDbits=1; prima del for? Non si dovrebbe scrivere cosi quando vuoi che il micro scriva su (led in questo caso) . Tu parti scrivendo su tutti i bit della porta D cosi, e quindi dovrebbero essere tutti accesi...invece no...

Come faccio a verificare la quantità di risorse che richiede?
Uso sempre Mplab
Avatar utente
Foto UtenteCseven
25 3 6
Frequentatore
Frequentatore
 
Messaggi: 284
Iscritto il: 25 apr 2009, 18:27
Località: Tv

1
voti

[19] Re: Super Car 8 LED

Messaggioda Foto Utenteposta10100 » 11 giu 2014, 19:08

Cseven ha scritto:Perché hai scritto LATDbits=1;

perché ho scritto il valore decimale da caricare nella variabile a 8 bit LATDbits.
Il compilatore poi lo ha tradotto in 00000001.
Cseven ha scritto:Come faccio a verificare la quantità di risorse che richiede?

Con MPLab non lo so, in genere dopo la compilazione il compilatore dice quanti byte di flash ha occupato, in ogni caso dentro il file .lst dovresti trovare l'informazione.

O_/
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)

Strumento per formule
Avatar utente
Foto Utenteposta10100
5.550 4 10 13
Master EY
Master EY
 
Messaggi: 4832
Iscritto il: 5 nov 2006, 0:09

0
voti

[20] Re: Super Car 8 LED

Messaggioda Foto UtenteCseven » 4 ott 2014, 17:05

Foto Utenteposta10100 mi aiuteresti a installare su ubuntu, piklab e tutto quello che serve ?
Avatar utente
Foto UtenteCseven
25 3 6
Frequentatore
Frequentatore
 
Messaggi: 284
Iscritto il: 25 apr 2009, 18:27
Località: Tv

PrecedenteProssimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 15 ospiti