Jump to content

    

David_Ali

Участник*
  • Content Count

    63
  • Joined

  • Last visited

Community Reputation

0 Обычный

About David_Ali

  • Rank
    Участник
  • Birthday 04/30/1988
  1. #include <mega8.h> #include <delay.h> int TEMP16; int T; unsigned char temp; void main(void) { DDRB=0x00; PORTB=0xFF; DDRB = 0x00; DDRD=0xFF; PORTD=0x00; DDRC = 0x00; PORTC = 0xFF; ACSR=(1<<ACBG)|(1<<ACIE)|(1<<ACIS1)|(1<<ACIS0)|(1<<ACO);//инициализация компаратора TEMP16 = 0; while(1){ // бесконечный цикл if (PINB.1 == 1 && TEMP16 == 1) { // PORTD.3=1; // включаем 3 пин delay_ms(500); // пауза 0.5 секунды PORTD.3=0; // выключаем 3 пин TEMP16 = 0; } if (PINB.1 == 0 && TEMP16 == 0) { // PORTD.3=1; //включаем 3 пин delay_ms(500); //пауза 0.5 секунды PORTD.3=0; //выключаем 3 пин delay_ms(500); //пауза 0.5 секунды PORTD.3=1; // включаем 3 пин delay_ms(500); //пауза 0.5 секунды PORTD.3=0; //выключаем 3 пин TEMP16 = 1; } if(PINB.2 == 0 && T == 0) { PORTD.2=1; // включаем второй пин delay_ms(3000); // пауза 3 секунды PORTD.2=0; //выключаем втрой пин T = 1; } if(PINB.2==1 && T == 1) { PORTD.2=1; // включаем второй пин delay_ms(3000); //пауза 3 секунды PORTD.2=0; //выключаем втрой пин T = 0; } temp = ACSR; // читаем ACSR temp &= 0x20; // 5 бит компаратора if(temp == 0x20) // если 1 PORTD.1=1; else PORTD.1=0; // если 0 } } Здравствуйте! эта штуковина у меня для получения данных о заряде аккумулятора, нескольких "прибамбасов" в виде мигания фарами и звука сирены. вопрос почему эти фнкции выполняются поочередно, если одновременно подать 0 или 1 на оба пина PB1 и PB0, ничего не просходит, а по отдельности работает. P.S. спасибо за совет с CVavr, им реально удобно пользоватся.
  2. Спасибо большое, я обязательно попрактикую это сегодня же, я сам дописал с горем пополам свой код, все работает нормально, даже добавил туда еще функции. Теперь стоит эта штука на борту ВАЗ2107. Заводит ее, открывает закрывает окна, блокирует двери и прочие мелочи. Хоть и мелочи, но приятно. Даже маленький дисплей от нокиа показывает температуру в салоне(датчик тмпературы dht11), потом думаю встроить ее куда нибудь в более важную часть. Пока работы много время нет, но опыт с ней и приходит. Хочу подключить ко всему этому делу gsm sim900 и пару датчиков и сигнализацию получать в виде смс, просто самоучкой быть тяжеловато немного. В принципе как и всегда. Еще раз спасибо за ответ.
  3. Не доделанное добро это не есть добро.. Пас есть пас.. Спасибо за все. Сам разберусь.
  4. Рабочий!! я его скомпилировал, залил в МК и все работает так как мне надо. как это не рабочий.. ну вы ребята.. мне что видео снять как он компилится?? это раз! во вторых "B" пишу потому что он в смайлик превращается тут, думал профессионалы догадаются, но видимо не догадались что б там маленькое. Спасибо за информацию!
  5. #include <avr/io.h> #include <avr/interrupt.h> #define FOSC 8000000L//Тактовая частота #define BAUD 9600L //Скорость порта #define MYUBRR FOSC/16/BAUD-1 void USART_Transmit( unsigned char data ); void USART_Init( unsigned int ubrr); ISR(USART_RXC_vect) { int b; b = UDR; USART_Transmit( B ); } void USART_Init( unsigned int ubrr) { UBRRH = (unsigned char)(ubrr>>8); UBRRL = (unsigned char)ubrr; UCSRB=(1<<RXEN)|( 1<<TXEN); UCSRB |= (1<<RXCIE); UCSRC=(1<<URSEL)|(0<<UMSEL)|(0<<UPM1)|(0<<UPM0)|(0<<USBS)|(0<<UCSZ2)|(1<<UCSZ1)|(1<<UCSZ0); } void USART_Transmit( unsigned char data ) { while ( !(UCSRA & (1<<UDRE)) ); UDR = data; } int main(void) { char data; PORTB=0x00; DDRB=0xFF; PORTD=0x00; DDRD=0x00; USART_Init (MYUBRR); sei(); while(1) { data=UDR; if(data=='A') { PORTB=0x1; } if(data=='B') { PORTB=0x00; } } } вот это рабочий код на атмега16. на атмега восемь он не работает(естественно я меняю что надо по ДШ на мегу 8). кто знает что там нужно поменять скажите, и объясните почему!!) прошу учить, а не поучать! P.S. GGC AVRом компилирую. потому что код вижн не дает мне хекс файлов, хоть в настройках я и указываю оутпут файлы хексами. и как использовать <util/setbaud.h>??
  6. Я не тот код послал. Извините. Приду домой сразу вышлю.
  7. В таком случае другие МК тоже не работали бы. А они то работают.
  8. #include <avr/io.h> #include <avr/interrupt.h> #define FOSC 8000000L//Тактовая частота #define BAUD 9600L //Скорость порта #define MYUBRR FOSC/16/BAUD-1 void USART_Transmit( unsigned char data ); void USART_Init( unsigned int ubrr); //Обработка прерывания чтения USART ISR(USART_RXC_vect) { int b; b = UDR; USART_Transmit( b ) ;//Отправляем то, что получили } //Инициализация модуля USART void USART_Init( unsigned int ubrr) { //Задаем скорость работы USART UBRRH = (unsigned char)(ubrr>>8); UBRRL = (unsigned char)ubrr; UCSRB=(1<<RXEN)|( 1<<TXEN); //разращён прием и передача UCSRB |= (1<<RXCIE); //прерывание при чтении //URSEL,UMSEL=0 асинхронный,UPM01=0 Parity нет, USBS=0 1 стоп бит,UCSZ012 = 3 8бит данных UCSRC=(1<<URSEL)|(0<<UMSEL)|(0<<UPM1)|(0<<UPM0)|(0<<USBS)|(0<<UCSZ2)|(1<<UCSZ1)|(1<<UCSZ0); } //Функция отправки данных void USART_Transmit( unsigned char data ) { while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема UDR = data; //Начало передачи данных } int main(void) { USART_Init (MYUBRR); sei();//разрешаем прерывания while(1)//вечный цикл { } } вот это рабочий пример для меги16, тут же меняю порты и регистры для меги8, беру из ДШ, ничего не работает, возвращает все символы. как думаете изза чего?
  9. да нет ничего не коротит.. что то с кодом кажет не так.. или с настройками блютуз модуля..
  10. Да эхо работает правильно. Но дело в том что когда я его отключаю оно все равно работает :-)
  11. осталное не работает, на атмеге 16 работает, а когда переделываю для 8ки не работает, от чего может быть? МК тоже разнве брал, все 8ки одно и тоже делают (
  12. не вышло опять ничего.. он все в режиме эха..
  13. Спасибо сейчас проверю, ну просто на меге 16 все работает, просто там пару изменений чисто по датащиту МК
  14. Ребята, ну кто нибудь скажите мне почему на меге8 вместо нормальной работы, он работает в режиме эха?? на меге16 все ОК. а тут что не пошлю все возвращает. вот код ---> #include <avr/io.h> #include <avr/interrupt.h> #define FOSC 8000000L//Тактовая частота #define BAUD 9600L //Скорость порта #define MYUBRR FOSC/16/BAUD-1 void USART_Transmit( unsigned char data ); void USART_Init( unsigned int ubrr); //Обработка прерывания чтения USART ISR(USART_RXC_vect) { int b; b = UDR; USART_Transmit( B ); //Отправляем то, что получили } //Инициализация модуля USART void USART_Init( unsigned int ubrr) { //Задаем скорость работы USART UBRRH = (unsigned char)(ubrr>>8); UBRRL = (unsigned char)ubrr; UCSRB=(1<<RXEN)|( 1<<TXEN); UCSRB |= (1<<RXCIE); UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); } //Функция отправки данных void USART_Transmit( unsigned char data ) { while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема UDR = data; //Начало передачи данных } int main(void) { unsigned char data; PORTB=0x00; DDRB=0xFF; PORTD=0x00; DDRD=0x00; USART_Init (MYUBRR); sei(); while(1)//вечный цикл { if(data=='A') { PORTB=0xFF; } if(data=='B') { PORTB=0x00; } } } P.S. и как пользоваться Codevision? Попробовал на нем писать у меня не получается НЕХ файл, а только асм.
  15. Но почему же? Разве это не то? Просто мой компилятор не стал понимать некоторые вещи из тех примеров вот я взял калькулятор. :-) Читаю про Industrial Ethernet про скада прочитал. И не вижу там места для разработчика.. Это все готовые системы для пользования. А вот создать свой плк это уже почетное дело :-)