Отговори на тема  [ 5 мнения ] 
ПРОГРАМИРАНЕ с MikroC 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Мар 26, 2017 8:33 pm
Мнения: 3
Мнение ПРОГРАМИРАНЕ с MikroC
Здравейте, имам едно запитване, относно read and write internal EEPROM, на pic16F887. Става въпрос за контрол на сервомотор с потенциометър, който да има ръчен и атоматичен режим. Отскоро се занимавам с програмиране и все още не са ми ясни някои неща. Благодаря ви предварително за помощта.


Пон Мар 27, 2017 10:03 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение Re: ПРОГРАМИРАНЕ с MikroC
На мен пък не ми е ясно какво точно питаш :D .


Пон Мар 27, 2017 2:08 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Фев 13, 2013 3:35 pm
Мнения: 1803
Мнение Re: ПРОГРАМИРАНЕ с MikroC
Dimitar написа:
На мен пък не ми е ясно какво точно питаш :D .

До колкото разбирам- как да записва и чете в internal EEPROM, на pic16F887.


Сря Мар 29, 2017 8:24 am
Профил WWW
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Мар 26, 2017 8:33 pm
Мнения: 3
Мнение Re: ПРОГРАМИРАНЕ с MikroC
Да как да запиша позицията на серво мотора от 0 до 90 градуса като го завъртам с потенциометара и след това то да става автоматично.


Чет Мар 30, 2017 1:37 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Мар 26, 2017 8:33 pm
Мнения: 3
Мнение Re: ПРОГРАМИРАНЕ с MikroC
Пробвам с примери от интернет но нещо не се пулучава :( . ето един от тях.

unsigned char adcData,a=0;
unsigned char adc;
unsigned char i=0,j,k=0;

//----------------------Lecture du eeprom fonction------------------------------
unsigned char readEEPROM(unsigned char address)
{
EEADR = address; //Address to be read
EECON1.EEPGD = 0;//Selecting EEPROM Data Memory
EECON1.RD = 1; //Initialise read cycle
return EEDATA; //Returning data
}
//----------------------Ecriture dans eeprom fonction---------------------------
void writeEEPROM(unsigned char address, unsigned char datas)
{
unsigned char INTCON_SAVE;//To save INTCON register value
EEADR = address; //Address to write
EEDATA = datas; //Data to write
EECON1.EEPGD = 0; //Selecting EEPROM Data Memory
EECON1.WREN = 1; //Enable writing of EEPROM
INTCON_SAVE=INTCON;//Backup INCON interupt register
INTCON=0; //Diables the interrupt
EECON2=0x55; //Required sequence for write to internal EEPROM
EECON2=0xAA; //Required sequence for write to internal EEPROM
EECON1.WR = 1; //Initialise write cycle
INTCON = INTCON_SAVE;//Enables Interrupt
EECON1.WREN = 0; //To disable write
while(PIR2.EEIF == 0)//Checking for complition of write operation
{
asm nop; //do nothing
}
PIR2.EEIF = 0; //Clearing EEIF bit
}
//----------------------------Interruption externe------------------------------
//------------------stockage position servo dans l Eeprom-----------------------
void interrupt() // Interrupt ISR
{
INTCON.INTF=0; // Clear the interrupt 0 flag
writeEEPROM(k,adcData);k++;
//j=k/4;
}
//----------------------------Programme principale------------------------------

void main()
{
//-----------------------Configuration des modules------------------------------
OSCCON = 1<<IRCF2|1<<IRCF1|1<<IRCF0; // IRCF<2:0>: 111 = 8Mz
ANSEL = 0x01; // Configure AN0 pins as analog
ANSELH = 0;
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;
OPTION_REG.INTEDG = 1; // Set Rising Edge Trigger for INT RB0
INTCON.GIE = 1; // Enable The Global Interrupt
INTCON.INTE = 1; // Enable INT
ADCON1 = 0x80; // Configuration Register ADC
ADC_Init(); // Initialisation ADC
TRISA= 0b00000001; // Configuration IO
TRISB= 0b00000001; // Configuration IO
TRISC= 0b00000011; // Configuration IO
porta=0; // Initialisation port A
portb=0; // Initialisation port B
portc=0; // Initialisation port C
do
{
//-----------------------------mode apprentissage-------------------------------
if(PORTC.F0==1 )
{
// 1er channel
PORTC.F2=1;PORTC.F3=0;
adcData = ADC_Read(0)*0.25;
PORTB.F1 = 1; // Rising edge of pulse
Delay_us(1000);
for(i=0; i<adcData; i++)
{
Delay_us(1);
}
PORTB.F1 = 0; // Falling edge of pulse
Delay_ms(2);
}
//-------------------------------mode automatique-------------------------------
if(PORTC.F1==1)
{
PORTC.F3=1;PORTC.F2=0;
a=0; //Initialisation ariable adresse EEprom
for(j=0;j<k;j++) //Lecture des valeurs stock? dans EEPROM
{
// 1er servo
adc = readEEPROM(a); //Lecture valeur servo 1 du EEPROM
PORTB.F1 = 1; // Rising edge of pulse//PWM g?n?rer
Delay_us(1000);
for(i=0; i<adc; i++)
{
Delay_us(1);
}
PORTB.F1 = 0; // Falling edge of pulse
Delay_ms(100);
a+=1; //Incr?mentation addresse EEPROM
}
}
}while(1);
}


Чет Мар 30, 2017 2:19 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 5 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 7 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни