Eppur si muove!

Non Gastronomia
Rispondi
Avatar utente
ale
Mac
Messaggi: 6797
Iscritto il: 27 apr 2001, 20:31
Località: Romanengo
Contatta:

Eppur si muove!

Messaggio da ale » 08 ago 2013, 12:10

evviva!!
era solo un problema di masse!!!!

https://vimeo.com/71956691

ora non resta che collegarlo al telescopio :)
E pluribus unum

Avatar utente
ale
Mac
Messaggi: 6797
Iscritto il: 27 apr 2001, 20:31
Località: Romanengo
Contatta:

Re: Eppur si muove!

Messaggio da ale » 08 ago 2013, 12:42

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

Avatar utente
ale
Mac
Messaggi: 6797
Iscritto il: 27 apr 2001, 20:31
Località: Romanengo
Contatta:

Re: Eppur si muove!

Messaggio da ale » 08 ago 2013, 17:46

piccola curiosità.
qualcuno sa come funziona un encoder ottico? quelli col dischetto forato che gira.
E pluribus unum

Avatar utente
gdeber
GranGianGnomo
Messaggi: 1547
Iscritto il: 13 set 2001, 10:40
Località: Rivolta d'Adda
Contatta:

Re: Eppur si muove!

Messaggio da gdeber » 08 ago 2013, 18:37

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

Avatar utente
ale
Mac
Messaggi: 6797
Iscritto il: 27 apr 2001, 20:31
Località: Romanengo
Contatta:

Re: Eppur si muove!

Messaggio da ale » 09 ago 2013, 10:25

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.
E pluribus unum

Avatar utente
gdeber
GranGianGnomo
Messaggi: 1547
Iscritto il: 13 set 2001, 10:40
Località: Rivolta d'Adda
Contatta:

Re: Eppur si muove!

Messaggio da gdeber » 09 ago 2013, 14:20

non hai il modello?
posso chiedere ai miei colleghi elettricisti...
***L'assembler è alla base dell'universo®***
http://www.mecheros.it

Avatar utente
ale
Mac
Messaggi: 6797
Iscritto il: 27 apr 2001, 20:31
Località: Romanengo
Contatta:

Re: Eppur si muove!

Messaggio da ale » 11 ago 2013, 22:07

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.
E pluribus unum

Avatar utente
ale
Mac
Messaggi: 6797
Iscritto il: 27 apr 2001, 20:31
Località: Romanengo
Contatta:

Re: Eppur si muove!

Messaggio da ale » 23 ago 2013, 11:34

Ecco la parte hardware.
Domani mi sa che lo collaudo.
Per ora ho lasciato perdere il discorso dell'encoder.
Allegati
image.jpg
E pluribus unum

Avatar utente
ale
Mac
Messaggi: 6797
Iscritto il: 27 apr 2001, 20:31
Località: Romanengo
Contatta:

Re: Eppur si muove!

Messaggio da ale » 26 ago 2013, 12:46

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?
E pluribus unum

Avatar utente
ale
Mac
Messaggi: 6797
Iscritto il: 27 apr 2001, 20:31
Località: Romanengo
Contatta:

Re: Eppur si muove!

Messaggio da ale » 08 set 2013, 13:01

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...
E pluribus unum

Rispondi