- Messaggi: 131
- Ringraziamenti ricevuti 0
ROVER
- luongo
-
Autore della discussione
- Premium Utente
-
Less
Di più
12 Anni 9 Mesi fa - 12 Anni 9 Mesi fa #6
da luongo
Risposta da luongo al topic Re: ROVER
di seguito il codice quasi ultimato mi manca un'ultima routine e una piccola revisione
P.S.: ho scritto in ambiente mikroC di seguito il link con le varie librerie per poter seguire a pieno il codice
libreria modulo USART: www.mikroe.com/download/eng/documents/co...height=740&width=970
libreria modulo ADC: www.mikroe.com/download/eng/documents/co...height=740&width=970
libreria LCD: www.mikroe.com/download/eng/documents/co...height=740&width=970
infine per la CGRAM ho usato un tool con il quale annerisco i puntini che mi servono e lui mi genera la funzione
Code:
//SOFTWARE DI GESTIONE DEL TRASMETTITORE DELL'ATSS (BASATO SU PIC16F876A)
//dichiarazione variabili
char UART_bytes [4] = {1,0,0,0}; //array contenente i bytes dell'UART:
//0 "start byte",
//1 "device byte",
//2 "direction byte",
//3 "speed byte"
char direction [5] = {0,60,195,240,15}; //array contenente le direzioni dei...
//motori: 0 "stop", 1 "avanti",
//2 "indietro", 3 "destra" e
//4 "sinistra"
char speed_x = 0x00; //variabili pilotate dal joystick
char speed_y = 0x00;
char v_bat = 0x00;
char ir = 0x00;
char cnt = 0x00; //contatore per l'invio dei dati
void main ()
{
//inizializzazione porti I/O
TRISA = 0xFF; //inizializza intero PORTA come input
TRISB = 0x00; //inizializza i PORT B e C come uscite
TRISC = 0x00;
//inizializzazione modulo ADC
CMCON = 0x07; //disattiva i comparatori
ADCON1.F0 = 0; //attiva i canali analogici AN0, 1, 4
ADCON1.F1 = 0; //imposta una tensione di riferimento
ADCON1.F2 = 1: //a 5V
ADCON1.F3 = 1;
ADC_Init();
//inizializzazione modulo USART
UART1_Init(2500); //inizializza modulo UART a 2500 baud
//inizializzazione LCD
sbit LCD_RS at RB4_bit; //inizializza LCD a 4 bit
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_TURN_ON);
//visualizzazione termine inizializzazione
Lcd_Out(1,4,"ATSS READY");
Delay_ms(250);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Out_Cp("N.V.: ON");
const char character[] = {15,8,27,27,27,8,15,0};
void CustomChar(char pos_row, char pos_row)
{
char i;
Lcd_Cmd(64);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character[i]);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Chr(pos_row, pos_row, 0);
}
const char character[] = {31,0,31,31,31,0,31,0};
void CustomChar(char pos_row, char pos_char)
{
char i;
Lcd_Cmd(64);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character[i]);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Chr(pos_row, pos_char, 0);
}
const char character[] = {31,1,29,29,29,1,31,0};
void CustomChar(char pos_row, char pos_char)
{
char i;
Lcd_Cmd(64);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character[i]);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Chr(pos_row, pos_char, 0);
}
//inizio programma
speed_x = ADC_Get_Sample(0); //acquisisci il dato dal joystick
//asse x e codifica velocità e
//direzione
if (speed_x < 128)
{
128 - speed_x = speed_x;
if (speed_x <= 6)
{
UART_bytes[1] = 0x03; //device byte MDSMC
UART_bytes[2] = 0x00; //direction byte "stop"
UART_bytes[3] = 0x00; //speed byte "0"
while (cnt != 4)
{
if (UART1_Tx_Idle() == 1)
{
UART1_Write(USART_bytes[cnt]);
cnt++;
}
}
}
else
{
UART_bytes[1] = 0x03; //device byte MDSMC
UART_bytes[2] = direction[2];//direction byte "stop"
UART_bytes[3] = speed_x; //speed byte "speed_x"
cnt = 0;
while (cnt != 4)
{
if (UART1_Tx_Idle() == 1)
{
UART1_Write(USART_bytes[cnt]);
cnt++;
}
}
}
}
else if (speed_x > 128)
{
speed_x - 128 = speed_x;
if (speed_x <= 6)
{
UART_bytes[1] = 0x03;
UART_bytes[2] = 0x00;
UART_bytes[3] = 0x00;
cnt = 0;
while (cnt != 4)
{
if (UART1_Tx_Idle() == 1)
{
UART1_Write(USART_bytes[cnt]);
cnt++;
}
}
}
else
{
UART_bytes[1] = 0x03; //device byte MDSMC
UART_bytes[2] = direction[1];//direction byte "avanti"
UART_bytes[3] = speed_x; //speed byte "speed_x"
cnt = 0;
while (cnt != 4)
{
if (UART1_Tx_Idle() == 1)
{
UART1_Write(USART_bytes[cnt]);
cnt++;
}
}
}
}
speed_x = ADC_Get_Sample(1); //acquisisci il dato dal joystick
//asse y e codifica velocità e
//direzione
if (speed_y < 128)
{
128 - speed_y = speed_y;
if (speed_y <= 6)
{
UART_bytes[1] = 0x03; //device byte MDSMC
UART_bytes[2] = direction[3];//direction byte "destra"
UART_bytes[3] = speed_y; //speed byte "speed_y"
cnt = 0;
while (cnt != 4)
{
if (UART1_Tx_Idle() == 1)
{
UART1_Write(USART_bytes[cnt]);
cnt++;
}
}
}
}
else if (speed_y > 128)
{
speed_y - 128 = speed_y;
if (speed_y > 6)
{
UART_bytes[1] = 0x03; //device byte MDSMC
UART_bytes[2] = direction[4];//direction byte "sinistra"
UART_bytes[3] = speed_y; //speed byte "speed_y"
cnt = 0;
while (cnt != 4)
{
if (UART1_Tx_Idle() == 1)
{
UART1_Write(USART_bytes[cnt]);
cnt++;
}
}
}
}
if (PORTC.F5 == 0)
{
if (ir == 0)
{
ir = 255;
//manda IR on
//aggiorna LCD
}
else
{
ir = 0;
//manda ir off
//aggiorna LCD
}
}
//controllo batteria
}
P.S.: ho scritto in ambiente mikroC di seguito il link con le varie librerie per poter seguire a pieno il codice
libreria modulo USART: www.mikroe.com/download/eng/documents/co...height=740&width=970
libreria modulo ADC: www.mikroe.com/download/eng/documents/co...height=740&width=970
libreria LCD: www.mikroe.com/download/eng/documents/co...height=740&width=970
infine per la CGRAM ho usato un tool con il quale annerisco i puntini che mi servono e lui mi genera la funzione
Ultima Modifica 12 Anni 9 Mesi fa da luongo.
Si prega Accesso o Crea un account a partecipare alla conversazione.
- luongo
-
Autore della discussione
- Premium Utente
-
Less
Di più
- Messaggi: 131
- Ringraziamenti ricevuti 0
12 Anni 9 Mesi fa #7
da luongo
per le foto bisognerà aspettare la prossima settimana visto che la prossima settimana terminerò lo chassis
Risposta da luongo al topic Re: ROVER
Mauro Laurenti ha scritto: ...ottimo!
...magari anche qualche foto!
Anche l'occhio vuole la sua parte!
Saluti,
Mauro
per le foto bisognerà aspettare la prossima settimana visto che la prossima settimana terminerò lo chassis
Si prega Accesso o Crea un account a partecipare alla conversazione.
- luongo
-
Autore della discussione
- Premium Utente
-
Less
Di più
- Messaggi: 131
- Ringraziamenti ricevuti 0
12 Anni 9 Mesi fa #8
da luongo
Risposta da luongo al topic Re: ROVER
Ho dimenticato di inseri il software in un while infinito
Si prega Accesso o Crea un account a partecipare alla conversazione.
12 Anni 9 Mesi fa #9
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: ROVER
...non mi ero accorto del while! 
...allora aspettiamo le foto!
Saluti,
Mauro

...allora aspettiamo le foto!
Saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
- luongo
-
Autore della discussione
- Premium Utente
-
Less
Di più
- Messaggi: 131
- Ringraziamenti ricevuti 0
12 Anni 9 Mesi fa #10
da luongo
Per le foto purtroppo ci vorrà tempo perchè devo ancora realizzare lo chassis ora esiste a livello software
Risposta da luongo al topic Re: ROVER
Mauro Laurenti ha scritto: ...non mi ero accorto del while!
...allora aspettiamo le foto!
Saluti,
Mauro
Per le foto purtroppo ci vorrà tempo perchè devo ancora realizzare lo chassis ora esiste a livello software
Si prega Accesso o Crea un account a partecipare alla conversazione.
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Forum - Ultimi messaggi
-
- progetto can
- da marcelloraja
-
- MODULO GSM SIM900A
- da Mauro Laurenti
-
- Freedom III e compilazioni fallite
- da Mauro Laurenti
-
- Gestione degli errori su comunicazione seriale
- da Mauro Laurenti
-
- Timer0 e interrupt
- da Mauro Laurenti