Hex kode, CCS compiler

A

amith.srivatsa

Guest
Kære alle,

Jeg har lige skiftet fra PIC16F690 til PIC16F876A.PIC bruges til motor førerens anvendelse, og det sender signaler til H-broen VNH2SP30.Koden er skrevet til PIC16F690 arbejdede godt uden fejl.

Men nu, får jeg nogle fejl, primært ukendt søgeord, ukendt identifikator, når jeg prøver at kompilere den samme kode, men denne gang for PIC16F876A.Jeg lige har skiftet header-filer.Kan nogen hjælpe mig med fejlfinding disse fejl?

Koden er nedenfor:

/ *
Compile med CCS, se http://ccsinfo.com/ for detaljer.

Sample - At prøve: Send via I2C at løse 0x50 disse data -> 0x02107F for at indstille motorer til "Frem" & Half hastighed.

Setup: pin A5: seriel kommunikation
pin C0, C1: INA og INB for Motor1 (venstre)
klemme C6, C7: INA og INB for Motor2 (højre)
pin C2, C3: PWM til motor 1 & 2 henholdsvis (speed control)
pinB4, B6: I2C kommunikation, SDA og SCLHistorie:

Version 2:
-Automatisk stop efter 600 ms funktion til at stoppe motorer, når ingen i2c kommandoen er blevet send
stadig problemer med prescale og div værdi, men arbejder

Version 1: 25 august 2009
- At kontrollere hastighed og retning af to DC-motorer med to Full H-Bridge VNH2SP30 og en PIC

* /

# include <16F876A.h>
# enhed ADC = 8

# FUSES NOWDT / / Ingen Watch Dog Timer
# FUSES INTRC_IO / / Indre RC OSC, ingen CLKOUT
# FUSES NOPROTECT / / Kode ikke beskyttet mod læsning
# FUSES Brownout / / Nulstil, når Brownout opdaget
# FUSES MCLR / / Master Clear pin aktiveret
# FUSES NOCPD / / Ingen EE beskyttelse
# FUSES NOPUT / / No Power Up Timer
# FUSES IESO / / Indre Eksterne skifte over mode aktiveret
# FUSES FCMEN / / Fail-safe ur skærm aktiveret
# brug forsinkelse (ur = 8000000)
# bruge RS232 (baud = 19200, xmit = PIN_A5) / / bruges til serielle com
# brug I2C (Slave, sda = PIN_B4, SCL = PIN_B6) / / bruges til I2C

/ *
Pin definerer
* /
# define førte PIN_A4
# define driver_a PIN_C0 / / INA og INB for motor1
# define driver_b PIN_C1
# define driver_c PIN_C6 / / INA og INB for motor2
# define driver_d PIN_C7

# define TYPE 0x01
# define VERSION "v1.4"
# define VERSION_MAJOR 1
# define VERSION_MINOR 4

# define GET_TYPE 0x00
# define GET_VERSION 0x01#define SET_MOTOR 0x02 / *
Variabler
* /
int8 adresse;
int8 tilstand;
int1 dataready = false;
int1 optælling = false;
long int timerone = 0;
int overflow = 0;
int8 mode = 0;
int8 databyte1 = 0;
int8 databyte2 = 0;
/ *
Funktion prototyper
* /
/ / Beskrivelse: Denne funtion aktiverer eller deaktiverer INA, INB imputs for både VNH2SP30 Full-broer.
/ / Argumenter: Boolean sætte
/ / Return: Ingen
void EnableDrivers (int1 muligt);/ / Beskrivelse: Denne funtion sæt pwm henhold til den hastighed og INA, INB ifølge kommando for begge motorer
/ / Argumenter: int8 config
/ / Int8 pligt
/ / Return: Ingen
void SetDCControl (int8 config, int8 told);
/ / Der er nogle problemer med PWM-modul, før der skiftes pinout du klar.
void clear (void);/ / Describtion: denne funktion hedder adressen
/ / Argumenter: none
/ / Return: fulde adresse (8bit klog)
int8 ReadAddress (void);
/ / Describtion: Denne funktion bruges til at behandle modtagne data fra I2C bus.
/ / Argumenter: modtagne byte 1 og modtagne byte 2
/ / Return: none
void ProcessData (int8 byte1, int8 byte2);
/ / Interrupt service rutine for I2C activty
# int_SSP

void SSP_isr () (
output_high (LED);
/ / Du vil kun blive afbrudt, hvis adressen er korrekt.
/ / Først kontrollere tilstanden: læse eller skrive
state = i2c_isr_state ();
if (state <0x80) (/ / Master er at sende data
if (state == 0) ()
else if (state == 1)
(
mode = i2c_read ();
)
else if (state == 2)
(
databyte1 = i2c_read ();
)
else if (state == 3)
(
databyte2 = i2c_read ();
if (mode == SET_MOTOR)
(
dataready = true;
)
)
)
else if (state == 0x80) / / master læser data
(
if (mode == GET_TYPE)
(
i2c_write (type);
)
else if (mode == GET_VERSION)
(
i2c_write (VERSION_MAJOR);
)
)
else if (state == 0x81) / / master læser data
(
i2c_write (VERSION_MINOR);
)
output_low (LED);
return;
)////////////////////////////////////////////////// //////////////////////////
void main () (
setup_adc_ports (NO_ANALOGS | VSS_VDD);
setup_adc (ADC_OFF);
setup_timer_0 (RTCC_INTERNAL | RTCC_DIV_1);
/ / setup_timer_1 (T1_DISABLED);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8); / / timer1 til automatisk stop efter 600ms funktion
setup_timer_2 (T2_DIV_BY_16, 124, 1); / / 1000 Hz, PWM frekvens
setup_comparator (NC_NC_NC_NC);
enable_interrupts (INT_SSP);
enable_interrupts (GLOBAL);
setup_oscillator (OSC_8MHZ);
printf ( "I2C motor driver med I2C \ n \ r ");// udskrive til serie
printf ( "Version% s \ n \ r", version);
printf ( "Made by ROBODOMUS \ n \ r");
EnableDrivers (false); / / True -> INA og INB aktiveres automatisk ved opstart, False -> omvendt
address = ReadAddress ();
printf ( "Den adresse = '% X' \ n \ r", adresse);
I2C_SlaveAddr (adresse);
clear ();while (1) (if (dataready == true) (
printf ( "Command = '% 02x' '% 02X' \ n \ r", databyte1, databyte2);
ProcessData (databyte1, databyte2);
set_timer1 (0);
overflow = 0;
optælling = true;
dataready = false;
)if ((tæller == true)) (
timerone = (get_timer1 () / 625);

if (timerone> = 97) (
overflow = 1;
)

if ((overflow> = 5)) (
EnableDrivers (falsk);
printf ( "Dens fredag & Rover er stoppet! \ n \ r");
overflow = 0;
optælling = false;
)
)delay_ms (10);
)
)
////////////////////////////////////////////////// //////////////////////////// *
Funtion boddies
* /

void EnableDrivers (værdier) (
if (værdier) (
output_high (driver_a);
output_high (driver_b);
output_high (driver_c);
output_high (driver_d);
)
else (
output_low (driver_a);
output_low (driver_b);
output_low (driver_c);
output_low (driver_d);
)
)

void SetDCControl (int8 config, unsigned int told) (
int sek = 3;
int i;

pligt>> = 1;
set_pwm1_duty (told);
printf ( "Duty% u \ n \ r", told);
switch (config)
(
case 0:
printf ( "Forward \ n \ r");
clear ();
setup_ccp1 (CCP_PWM | CCP_PWM_H_H | CCP_PULSE_STEERING_D | CCP_PULSE_STEERING_C); / / frem svarer til bens RC2 og RC3
output_high (driver_a);
output_low (driver_b);
output_high (driver_c);
output_low (driver_d);

break;

case 1:
for (i = 0; i <sek; i )
(
printf ( "Drej til venstre \ n \ r");
clear ();
setup_ccp1 (CCP_PWM | CCP_PWM_H_H | CCP_PULSE_STEERING_D | CCP_PULSE_STEERING_C); / / drej til venstre
output_high (driver_a);
output_low (driver_b);
output_low (driver_c);
output_high (driver_d);
)
dataready = false;
break;

case 2:
printf ( "Drej til højre \ n \ r");
clear ();
setup_ccp1 (CCP_PWM | CCP_PWM_H_H | CCP_PULSE_STEERING_D | CCP_PULSE_STEERING_C); / / tænde rightt
output_low (driver_a);
output_high (driver_b);
output_high (driver_c);
output_low (driver_d);
break;

case 3:
printf ( "Historiske \ n \ r");
clear ();
setup_ccp1 (CCP_PWM | CCP_PWM_H_H | CCP_PULSE_STEERING_D | CCP_PULSE_STEERING_C); / / baglæns
output_low (driver_a);
output_high (driver_b);
output_low (driver_c);
output_high (driver_d);
break;

default:
printf ( "Argumentet er ugyldigt! \ n \ r");
clear ();
setup_ccp1 (CCP_PWM | CCP_PWM_H_H);
output_low (PIN_C2);
output_low (PIN_C3);
output_low (PIN_C4);
output_low (PIN_C5);
break;
)
)

void clear (void) (
setup_ccp1 (CCP_PWM | CCP_PWM_H_H | CCP_PULSE_STEERING_A | CCP_PULSE_STEERING_B | CCP_PULSE_STEERING_C | CCP_PULSE_STEERING_D);
output_low (PIN_C2);
output_low (PIN_C3);
output_low (PIN_C4);
output_low (PIN_C5);
)

int8 ReadAddress () (
int8 temp = 0xa0; / / basen adresse er 1010000 (I2C-adresse er kun 7 bit!), svarer til den adresse 0x50

return temp;
)

void ProcessData (int8 Data1, int8 Data2)
(
int8 Mode;
int8 retninger;
/ / Afgøre, hvilken tilstand der anvendes
Mode = Data1;
Mode>> = 4;
switch (Mode)
(
case 1:
printf ( "Mode1 \ n \ r");
Directions = Data1 & 0x03; / / kun de to LSB er behov
SetDCControl (Directions, Data2);
break;

default:
printf ( "mode ukendt \ n \ r");
break;
)
return;
)

 
at all.

Jeg har ikke kontrollere alle detaljer, men fx # FUSES INTRC_IO ikke fungerer, fordi PIC16F876A har ingen intern oscillator
på alle.Du ønsker måske at kontrollere hardware-kompatibilitet for hver mulighed, der forårsager en fejl.

 

Welcome to EDABoard.com

Sponsor

Back
Top