Перейти к содержанию
    

den_sad

Участник
  • Постов

    6
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Понял.. видать в этом у меня и была ошибка, спасибо!
  2. Спасибо! Попробую OCR1AL = 97; Это вроде как надо указывать в HEX коде? А то в DEC равно 151 Или я опять что то путаю...
  3. Все ок, но меня больше волнует какие параметры прописать в таймер чтобы генерить 38 килогерц, delay для меня на данном этапе не критично
  4. возможно, вот только отличия с тем коэфициэнтом как 8\7.3728 Читал, нихрена не понял, прошу рабочие куски кода выделеные красным ,мозг уже взрывается
  5. с прерываниями все в порядке - это прием / передача команд по i-bus BMW Суть проекта управление штатными кнопками не штатной магнитолой эмулируя ее пульт ДУ..
  6. Расчет таймера для RC5

    Нужна помошь, никак не могу понять как добиться частоты 38килогерц на выходе.. вот листинг программы Использую Мега8 на кварце 7.3728Мгц /***************************************************** This program was produced by the CodeWizardAVR V1.25.7a Professional Automatic Program Generator © Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Version : Date : 23.05.2011 Author : F4CG Company : F4CG Comments: Chip type : ATmega8 Program type : Application Clock frequency : 8,000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 *****************************************************/ #include <mega8.h> // Standard Input/Output functions #include <stdio.h> #include <delay.h> #define RXB8 1 #define TXB8 0 #define UPE 2 #define OVR 3 #define FE 4 #define UDRE 5 #define RXC 7 #define FRAMING_ERROR (1<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<OVR) #define DATA_REGISTER_EMPTY (1<<UDRE) #define RX_COMPLETE (1<<RXC) // USART Receiver buffer #define RX_BUFFER_SIZE 22 #define PulseON TCCR1B=0x40;TCCR1A=0x05 #define PulseOFF TCCR1B=0;TCCR1A=0 //************************************************************************* char VOL_UP[6] = {0x50,0x04,0x68,0x32,0x11,0x1F}; // 50 04 68 32 11 1F char VOL_DN[6] = {0x50,0x04,0x68,0x32,0x10,0x1E}; //char SEEK_UP[6] = {0x50,0x04,0x68,0x3B,0x21,0x26}; char RAD_CDC[5] = {0x68,0x03,0x18,0x01,0x72}; //Ты включен? //char RAD_CDC_play[7] = {0x68,0x05,0x18,0x38,0x00,0x00,0x4D}; //Ты играешь? 680518380000 char RAD_CDC_play[7] = {0x68,0x05,0x18,0x38,0x01,0x00,0x4C}; //Ты играешь? 68 05 18 38 01 00 4C стоп воспр char CDC_RAD[6] = {0x18,0x04,0x68,0x02,0x00, 0x76}; //Ответ drk.xty char CDC_STAT[12] = {0x18,0x0A,0x68,0x39,0x02,0x09,0x00,0x3F,0x00,0x01,0x01,0x77}; //Статус я играю //39 00 09 00 3F 00 dd tt //************************************************************************* int RxRecieveEnable; int RxCnt; int RxPacketSize; int ParseEnable; char RxBuff[20]; char ch; int ledON; // IR JVC // int start = 320; // int pause = 160; // int togle=20; // END IR JVC int JVC_VOLUP[16]={1,0,0,0,1,1,1,1,1,0,0,0,0,1,0,0}; // Vol+ 10001111 10000100 void SendHI(void) { ledON=1; delay_us(400); //********** Здесь задержка должны быть 526vrc но почему то при delay_us(526) задержка по осцилографу больше ledON=0; delay_us(1200); } void SendLOW(void) { ledON=1; delay_us(400); ledON=0; delay_us(400); } void SendStart(void) { ledON=1; delay_us(6400); //********** Здесь задержка должны быть8.4 мс но почему то при delay_ms(8.4) задержка по осцилографу около 12-14 мс ledON=0; delay_us(3200); } void SendJVC_volUP(void) { int i; SendStart(); for (i=0;i<16; i++) { if (JVC_VOLUP[i]==0) {SendLOW();} else {SendHI();} } // This flag is set on USART Receiver buffer overflow // USART Receiver interrupt service routine interrupt [uSART_RXC] void usart_rx_isr(void) { ch = UDR; if((ch == 0x68 | ch == 0x50 | ch ==0x18) & (RxRecieveEnable == 0)) { RxRecieveEnable = 1; RxCnt = 0; RxPacketSize = 0; RxBuff[0] = ch; } else if(RxRecieveEnable==1) { if(RxCnt==0) { if((ch & 0x80) == 0) { RxPacketSize = ch; RxBuff[1] = RxPacketSize; RxCnt++; } } else if(RxCnt>0) // { RxBuff[RxCnt+1] = ch; RxCnt++; if(RxCnt > RxPacketSize) // { RxRecieveEnable = 0; RxCnt = 0; RxPacketSize = 0; ParseEnable = 1; //????? ?????????? ???????? ????? } } } } // Write a character to the USART Transmitter #ifndef _DEBUG_TERMINAL_IO_ #define _ALTERNATE_PUTCHAR_ #pragma used+ void putchar(char c) { while ((UCSRA & DATA_REGISTER_EMPTY)==0); UDR=c; } #pragma used- #endif int AnalizeMFL(void) { int n; int razmer; int volup=0; //?? ??????? ?????????? int voldn=0; razmer=RxBuff[1]+2; for (n=0;n<razmer;n++) //??????????? ??????????? ????? { if (RxBuff[n]==VOL_UP[n]) //50 04 68 32 11 1F { volup=volup+1; } if (RxBuff[n]==VOL_DN[n]) //50 04 68 32 10 1E { voldn=voldn+1; } } if (volup==razmer) { SendJVC_volUP(); // послать команду громкость + } if (voldn==razmer) { // PORTD.6=!PIND.6; // послать команду громкость - } return n; } int AnalizeRAD(void) { int n; int razmer; int ROLL=0; int STAT=0; razmer=RxBuff[1]+2; for (n=0;n<razmer;n++) // { if (RxBuff[n]==RAD_CDC[n]) //{0x68,0x03,0x18,0x01,0x72}; ты включен? { ROLL=ROLL+1; } if (RxBuff[n]==RAD_CDC_play[n]) //; что ты играешь? {0x68,0x05,0x18,0x38,0x00,0x00,0x4D}; { STAT=STAT+1; } } n=0; if (ROLL==razmer) // я включен { for (n=0;n<6;n++) { putchar(CDC_RAD[n]); //0x18,0x04,0x68,0x02,0x00, 0x76 } } if (STAT==razmer) // я играю { for (n=0;n<12;n++) { putchar(CDC_STAT[n]); // {0x18,0x0A,0x68,0x39,0x02,0x09,0x00,0x3F,0x00,0x01,0x01,0x77}; //Статус } } return n; } // Timer 1 output compare A interrupt service routine interrupt [TIM1_COMPA] void timer1_compa_isr(void) { // Place your code here TCNT1H=0; TCNT1L=0; {PORTD.6=!PIND.6;} //надо чтобы на PD6 была частота 38 килогерц if (ledON==1) {PORTD.7=!PIND.7;} else {PORTD.7=0;} } // Declare your global variables here void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P PORTB=0xFF; DDRB=0x00; // Port C initialization // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=P State5=P State4=P State3=P State2=P State1=P State0=P PORTC=0x7F; DDRC=0x00; /// Port D initialization // Func7=Out Func6=Out Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=0 State6=0 State5=P State4=P State3=P State2=P State1=P State0=P PORTD=0x3F; DDRD=0xC0; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00; TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 921,600 kHz // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x02; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; ////////////// что надо указать чтобы получить на PD6 была частоту 38 килогерц?? OCR1AH=0x00; OCR1AL=0x0C; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off MCUCR=0x00; TIMSK=0x10; // USART initialization // Communication Parameters: 8 Data, 1 Stop, Even Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00; UCSRB=0x98; UCSRC=0xA6; UBRRH=0x00; UBRRL=0x2F; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // Global enable interrupts #asm("sei") ledON=0; while (1) { //********************************************************************** SendJVC_volUP(); delay_ms(500); if (ParseEnable==1) { switch (RxBuff[0]) { case 0x68: { ParseEnable=0; AnalizeRAD();} break; case 0x50: { ParseEnable=0; AnalizeMFL();} break; case 0x18: { ParseEnable=0; } break; }; ParseEnable=0; } }; //while } красным отметил интересующие меня куски кода.. в Итоге 2 вопроса, почему delay.h дает не те задержки что я указываю и как добиться 38 килогерц для модуляции
×
×
  • Создать...