Eppur si muove!
Eppur si muove!
evviva!!
era solo un problema di masse!!!!
https://vimeo.com/71956691
ora non resta che collegarlo al telescopio
era solo un problema di masse!!!!
https://vimeo.com/71956691
ora non resta che collegarlo al telescopio
E pluribus unum
Re: Eppur si muove!
questa è la versione funzionante del programma che implementa gli half step e anche il controllo della direzione di marcia:
Codice: Seleziona tutto
#include <stdio.h>
#include <ctype.h>
#include <bcm2835.h>
int main(int argc, char **argv)
{
int i, parziale, num_giri, fine, ritardo;
char verso;
if(argc!=4){
printf("sintassi errata!\ntelescopio numero_cicli lunghezza_ciclo\nnumero_cicli: numero di cicli dei 4 bit\nlunghezza_ciclo: ritardo in millisecondi tra un ciclo e l'altro\nverso di rotazione (a-antiorario, o-orario)\n");
return 1;
}
fine=atoi(argv[1])*8;
ritardo=atoi(argv[2]);
verso=argv[3][0];
if (!bcm2835_init()){
printf("Errore inizializzazione bcm2835\n");
return 1;
}
bcm2835_gpio_fsel(RPI_GPIO_P1_15, BCM2835_GPIO_FSEL_OUTP); //PHASE 1
bcm2835_gpio_fsel(RPI_GPIO_P1_19, BCM2835_GPIO_FSEL_OUTP); //PHASE 2
bcm2835_gpio_fsel(RPI_GPIO_P1_21, BCM2835_GPIO_FSEL_OUTP); //I01
bcm2835_gpio_fsel(RPI_GPIO_P1_23, BCM2835_GPIO_FSEL_OUTP); //I11
bcm2835_gpio_fsel(RPI_GPIO_P1_22, BCM2835_GPIO_FSEL_OUTP); //I02
bcm2835_gpio_fsel(RPI_GPIO_P1_18, BCM2835_GPIO_FSEL_OUTP); //I12
bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_21, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_22, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
i=0;
parziale=0;
num_giri=0;
for( i = 0; i < fine; i++ )
{
parziale++;
switch(parziale)
{
case 1:
//fasi
if (verso=='a'){
bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_23, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_22, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_18, HIGH);
}
else
{
bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
}
break;
case 2:
//fasi
if (verso=='a'){
bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
}
else
{
bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_18, HIGH);
}
break;
case 3:
//fasi
if (verso=='a'){
bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_18, HIGH);
}
else
{
bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
}
break;
case 4:
//fasi
if (verso=='a'){
bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
}
else
{
bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_23, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
}
break;
case 5:
//fasi
if (verso=='a'){
bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_23, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
}
else
{
bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
}
break;
case 6:
//fasi
if (verso=='a'){
bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
}
else
{
bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_18, HIGH);
}
break;
case 7:
//fasi
if (verso=='a'){
bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_18, HIGH);
}
else
{
bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
}
break;
case 8:
//fasi
if (verso=='a'){
bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
}
else
{
bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_23, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_22, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_18, HIGH);
}
num_giri++;
printf("giri: %d\n",num_giri);
parziale=0;
break;
}
delay(ritardo);
}
bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_23, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
bcm2835_gpio_write(RPI_GPIO_P1_18, HIGH);
return 0;
}
E pluribus unum
Re: Eppur si muove!
piccola curiosità.
qualcuno sa come funziona un encoder ottico? quelli col dischetto forato che gira.
qualcuno sa come funziona un encoder ottico? quelli col dischetto forato che gira.
E pluribus unum
- gdeber
- GranGianGnomo
- Messaggi: 1547
- Iscritto il: 13 set 2001, 10:40
- Località: Rivolta d'Adda
- Contatta:
Re: Eppur si muove!
Quello del mouse ha un disco con delle tacche che ruota in mezzo a un emettitore (da un lato) e a (credo) due fotodiodi dall'altro.
***L'assembler è alla base dell'universo®***
http://www.mecheros.it
http://www.mecheros.it
Re: Eppur si muove!
quindi dici 5V quando è nero e 0 quando è trasparente? o viceversa.
questo encoder attaccato al motore non si accende. butta fuori sempre 0 e guardandolo con la telecamera ad infrarossi non noto lucette al suo interno.
andrà a 5V?
ho letto che alcuni encoder mandano fuori un output codificato, forse sono quelli assoluti.
questo encoder attaccato al motore non si accende. butta fuori sempre 0 e guardandolo con la telecamera ad infrarossi non noto lucette al suo interno.
andrà a 5V?
ho letto che alcuni encoder mandano fuori un output codificato, forse sono quelli assoluti.
E pluribus unum
- gdeber
- GranGianGnomo
- Messaggi: 1547
- Iscritto il: 13 set 2001, 10:40
- Località: Rivolta d'Adda
- Contatta:
Re: Eppur si muove!
non hai il modello?
posso chiedere ai miei colleghi elettricisti...
posso chiedere ai miei colleghi elettricisti...
***L'assembler è alla base dell'universo®***
http://www.mecheros.it
http://www.mecheros.it
Re: Eppur si muove!
appena torno provo a vedere. sono lontanuccio da casa in questi giorni.
a prima vista non avevo notato nessuna scritta
magari gli faccio una foto.
a prima vista non avevo notato nessuna scritta
magari gli faccio una foto.
E pluribus unum
Re: Eppur si muove!
Ecco la parte hardware.
Domani mi sa che lo collaudo.
Per ora ho lasciato perdere il discorso dell'encoder.
Domani mi sa che lo collaudo.
Per ora ho lasciato perdere il discorso dell'encoder.
E pluribus unum
Re: Eppur si muove!
Funziona!!
Appena riesco metto un video su vimeo.
Qualcuno sa come, nel vecchio caro C, fare in modo che succeda qualcosa finché si preme un bottone?
Ad esempio vorrei far andare avanti il telescopio finché premo la freccia a destra e magai avanti veloce finché tengo premuto anche lo shift.
Sarebbe fico. E poi magari andare a velocità inseguimento quando premo la I senza tenerla premuta.
Come si fa a leggere in continuo la tastiera?
Appena riesco metto un video su vimeo.
Qualcuno sa come, nel vecchio caro C, fare in modo che succeda qualcosa finché si preme un bottone?
Ad esempio vorrei far andare avanti il telescopio finché premo la freccia a destra e magai avanti veloce finché tengo premuto anche lo shift.
Sarebbe fico. E poi magari andare a velocità inseguimento quando premo la I senza tenerla premuta.
Come si fa a leggere in continuo la tastiera?
E pluribus unum
Re: Eppur si muove!
qual'è il metodo migliore per leggere i comandi direttamente da tastiera?
leggerli in diretta usando degli interrupt?
sembra una cosa molto dipendente da OS e architettura...
leggerli da un socket via rete?
risolve qualcosa?
avete mai provato a farlo? io l'avevo fatto in assembler. non mi pare il caso di imparare l'assembler dell'ARM del raspberry...
leggerli in diretta usando degli interrupt?
sembra una cosa molto dipendente da OS e architettura...
leggerli da un socket via rete?
risolve qualcosa?
avete mai provato a farlo? io l'avevo fatto in assembler. non mi pare il caso di imparare l'assembler dell'ARM del raspberry...
E pluribus unum