Målet med denne oppgaven var å få satt opp Hexbot og kommunikasjon over UART med SSC32U motorkontroller kortet.
Deler
- SSC32U motorkontrollerkort.
- PIC18F2480 mikrokontroller
- PICKIT 3 (For programmering)
- 4,7K ohm motstand
- 100 ohm motstand
- Strømforsyning 5V
Bilder
Video
Krets programmering
Krets kommunikasjon med SSC32U
Kode
Hele koden kan lastes ned fra github her.
// Konfigurasjon settes til å bruke intern oscillering med 8Mhz frekvens. pragma config OSC = IRCIO7
void ConfigureOscillator(void) { OSCTUNEbits.PLLEN = 0b0; // Slår av frekvens multiplikatoren, // siden vi ikke trenger høye frekvenser. OSCTUNEbits.TUN = 0b00000; // Ingen tilpassning nødvendig. OSCCONbits.IRCF = 0b101; // Setter intern frekvens til 2Mhz. }
// Dette er kommandoene vi kjører til servoene. const unsigned char* SERVO0 = "#0P1500T3000\r"; const unsigned char* SERVO1 = "#1P1900T3000\r"; const unsigned char* SERVO2 = "#2P1800T3000\r"; const unsigned char* SERVO4 = "#4P1400T3000\r"; const unsigned char* SERVO5 = "#5P1600T3000\r"; const unsigned char* SERVO6 = "#6P1700T3000\r"; const unsigned char* SERVO8 = "#8P1000T3000\r"; const unsigned char* SERVO9 = "#9P1600T3000\r"; const unsigned char* SERVO10 = "#10P1800T3000\r"; const unsigned char* SERVO16 = "#16P1400T3000\r"; const unsigned char* SERVO17 = "#17P1200T3000\r"; const unsigned char* SERVO18 = "#18P1500T3000\r"; const unsigned char* SERVO20 = "#20P2000T3000\r"; const unsigned char* SERVO21 = "#21P1300T3000\r"; const unsigned char* SERVO22 = "#22P1000T3000\r"; const unsigned char* SERVO24 = "#24P1900T3000\r"; const unsigned char* SERVO25 = "#25P1400T3000\r"; const unsigned char* SERVO26 = "#26P1000T3000\r";
// Definerer frekvensen vi kjører med til 2Mhz. #define _XTAL_FREQ 2000000
// Sender informasjon til servoene. UART_Write_String(SERVO0); UART_Write_String(SERVO1); UART_Write_String(SERVO2); UART_Write_String(SERVO4); UART_Write_String(SERVO5); UART_Write_String(SERVO6); UART_Write_String(SERVO8); UART_Write_String(SERVO9); UART_Write_String(SERVO10); UART_Write_String(SERVO16); UART_Write_String(SERVO17); UART_Write_String(SERVO18); UART_Write_String(SERVO20); UART_Write_String(SERVO21); UART_Write_String(SERVO22); UART_Write_String(SERVO24); UART_Write_String(SERVO25); UART_Write_String(SERVO26);
char UART_Init() { // Setter baud hastigheten så nært 9600 som mulig. BAUDCONbits.BRG16 = 0b1; TXSTAbits.BRGH = 0b1; SPBRG = 51; SPBRGH = 0; // Slår på UART kommunikasjon TXSTAbits.SYNC = 0b0; RCSTAbits.SPEN = 0b1; TXSTAbits.TXEN = 0b1; // Setter TX som utgang. TRISCbits.TRISC6 = 0b0; // Setter RX som inngang. TRISCbits.TRISC7 = 0b1; // Denne skal endres senere, men brukes for å være sikker på at alt er / konfigurert korrekt. __delay_ms(1000); }
// Skriver hvert tegn i strengen. void UART_Write_String(const unsigned char* str) { int arrayLength = strlen(str); for (unsigned int i = 0; i<arrayLength; i++) { char a = str[i]; if (a != '\0') { UART_Write(a); } } } // Skriver registeret så snart status registeret sier det er klart. void UART_Write(char data){ while(!TRMT); TXREG = data; }
Du må være logget inn for å legge inn en kommentar.