ROVER

  • luongo
  • Autore della discussione
  • Premium Utente
  • Premium Utente
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
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
  • Premium Utente
Di più
12 Anni 9 Mesi fa #7 da luongo
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
  • Premium Utente
Di più
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.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
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

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • luongo
  • Autore della discussione
  • Premium Utente
  • Premium Utente
Di più
12 Anni 9 Mesi fa #10 da luongo
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.

Registrati al sito LaurTec.

Forum - Ultimi messaggi