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

An.S

Members
  • Постов

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

  • Посещение

Информация

  • Пол
    Мужчина

Электроника

  • Стаж в электронике
    1-2 года
  • Сфера радиоэлектроники
    Контроллеры (начинающий), Силовая Электроника

Посетители профиля

712 просмотра профиля
  • URRS

Достижения An.S

Новичок

Новичок (1/14)

  • 10 постов на форуме
  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. Здравствуйте! Установил CodeVisionAVR, повторяю уроки авторов, а у меня ихние коды не работают. Пожалуйста, подскажите, что нужно сделать, чтоб заработало. С уважением. Повторил код, проверил в протеусе, а он не заработал. Подскажите как правильно написать код? CodeVisionAVR версии 3.10 . Возможно нужно какие галочки ставить при создании проекта в программе? #include <mega8.h> // Declare your global variables here void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port B initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Port C initialization // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0); // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0); // Port D initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=(0<<CS02) | (0<<CS01) | (0<<CS00); TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF // OC1A output: Disconnected // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2 output: Disconnected ASSR=0<<AS2; TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20); TCNT2=0x00; OCR2=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<TOIE0); // External Interrupt(s) initialization // INT0: Off // INT1: Off MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00); // USART initialization // USART disabled UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); SFIOR=(0<<ACME); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); // SPI initialization // SPI disabled SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0); // TWI initialization // TWI disabled TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE); while (1) { // Place your code here } } В CodeVisionAVR такой вариант написания кода.
  2. Начните с повторения по урокам, с мигалкой светодиодов проще. У вас есть атмел студия и протеус? Пробуйте писать код , а проверять в протеусе.
  3. А что такое, по-вашему, скважность? Зря здесь использовали конструкции (0<<DDCx), они только затрудняют чтение. Разумеется, никуда. Программировать контроллеры, не читая даташита - все равно, что заниматься электроникой, не зная закона Ома.Ну и главный вопрос: что ваш пост делает в этой теме? Как он связан с видеокурсом? Удалите, когда не по теме. В первых уроках говорилось о мигании светодиодов, так этот метод можно применить по управлению транзисторов. Разрабатываю вариант инвертора с микроконтроллером. https://fotki.yandex...81/view/1511328 Читаю как пользоваться программой кодовижен. Даташитом пользоваться трудновато, пока вникаю.
  4. Написал код с скважностью #include <mega8.h> #include <delay.h> void main(void) { DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (1<<DDC2) | (1<<DDC1) | (0<<DDC0); PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (1<<PORTC0); while (1) { if (PINC.0==0) { PORTC.1=1; delay_ms(5); PORTC.1=0; delay_ms(5); PORTC.2=1; delay_ms(5); PORTC.2=0; delay_ms(5); }; }; } Проверил в протеусе осциллографом, светодиоды мигают , а потом не мигают. Подскажите, так должно быть или нет? Когда проект перенести в железо, тогда также будит работать как в протеусе? Программу писал в кодевижене, хотел обойтись без таймера, так как не знаю куда ставить галочки.
  5. я и сейчас чукча, но читать подсказки, а тем более когда еще и готовое дают, научился. ну и я как бы в шутку а вы на вилы меня сразу)) Всё отлично. Автор видео урока озвучил, задавайте вопросы на форуме, так делаю. Ранее читать всю переписку нет времени. А подсказку понял, когда пробовал варианты вставок. Сейчас сижу над другими видеоуроками, и пошагово повторяю, чтоб вникнуть. Вроде не сложно, когда знать и понимать что делать.
  6. Причём тут помогут или нет, когда на практике не применять? Моё хобби и работа пересекается с контроллерами, приходится вникать и понимать. Viktor26, интересно, когда вы начали изучать ...., вы были из разряда чукча? а сейчас кем себя считаете?
  7. Спасибо, заработало! Знаю как ножки добавлять. Можно приступить к восьмому уроку. Подскажите, какие ещё можно почитать книги понятные? А про дисплеи почитать? За ранее спасибо!
  8. Не получается, чтоб заработала вторая лапка, и работало два вольтметра. А в домашнем задании нужно подключить третью лапку для амперметра, не знаю как. Спасибо за книгу, давно искал типа такой книги. Начну читать постепенно. //Atmega8a //Укажем частоту #define F_CPU 8000000 #include <avr/io.h> #include <util/delay.h> //Инициализируем библиотеку для работы с дисплеем #include "n5110.h" #include <stdlib.h> //Предварительная настройка void presets() { //Инициализируем дисплей Lcd_init(); //Настройка АЦП //ADCSRA ADCSRA |= (1<<ADEN) //Задействовать АЦП | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); //Делитель 128 = 64 кГц //ADMUX ADMUX |= (1<<REFS1)|(1<<REFS0); // Опорное напряжение внутрение 2.56 В внутрение } int readADC (unsigned int ch) { unsigned char set_admux = ADMUX; set_admux &= ~((1<<MUX3) | (1<<MUX2) | (1<<MUX1) | (1<<MUX0)); switch (ch) { case 1: set_admux | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (1<<MUX0);break; case 2: set_admux | (0<<MUX3) | (0<<MUX2) | (1<<MUX1) | (0<<MUX0);break; default:break; } ADMUX = set_admux; _delay_us(10); int tmp = 0; for (int i=0;i<40;i++) { ADCSRA |= (1<<ADSC); //Запуск преобразователя while ((ADCSRA &(1<<ADSC))); //Ожидание окончания преобразования tmp += ADC; //tmp = tap + ADC; } return tmp/40; } int main(void) { presets(); while(1) { Lcd_clear(); Lcd_printf(0,0, FONT_1X,((readADC(0)*2.56*(30/2.56))/1023), 1); Lcd_printf(0,1, FONT_1X,(readADC(1)*0.02935), 1); Lcd_update(); _delay_ms(200); } } Всё равно второй вольтметр не работает. Не знаю в чём дело.
  9. for (int i=0;i<40;i++) Сделал так , заработало без ошибок. В протеусе заработал только один вольтметр, и две строчки на экране показывало, что измерял один вольтметр. Пытался что то изменить в коде case 1: set_admux | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (1<<MUX0);break; default:break; Чтоб работали две лапки, не получилось у меня. На что нужно обратить внимание на исправления кода?
  10. Смотрю видеоролики , и конспектирую с помощью скрина, когда забываю, то конспект в помощь. Для меня это новое, сейчас нужно понять, а так документирую. По поводу мигалки, как можно написать код, чтоб между двумя сигналами была пауза? Один светодиод загорелся, выключился, пауза, загорелся второй светодиод, выключился, пауза, и так цикл до бесконечности.
  11. Как понял, своими словами: case 1: set_admux | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (1<<MUX0);break; Значение функции .... выбор лапки микроконтроллера for (int i=0;i<<40;i++) Цикл шагов..... Опрос, среднее арифметическое, после выводится значение на экран. Вставил скобочку строка 10- 20, фигурную. Заработало, но всё равно показывает Warning . В протеусе не получилось измерить напряжение двумя вольтметрами, на экране показывает нули. Возможно где то был не внимательным, придётся повторять заново урок 7 (практическое задание). Протеус у меня 7.10 , библиотека автора видеороликов. (скачал из сообщение №3,LCD_5110.zip)
  12. Добрый день! Подскажите, где здесь ошибка в этой программе? Вроде по уроку всё правильно повторил, но не могу скомпилировать . //Atmega8a //Укажем частоту #define F_CPU 8000000 #include <avr/io.h> #include <util/delay.h> //Инициализируем библиотеку для работы с дисплеем #include "n5110.h" #include <stdlib.h> //Предварительная настройка void presets(){ //Инициализируем дисплей Lcd_init(); //Настройка АЦП //ADCSRA ADCSRA |= (1<<ADEN) //Задействовать АЦП | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); //Делитель 128 = 64 кГц //ADMUX ADMUX |= (1<<REFS1)|(1<<REFS0); // Опорное напряжение внутрение 2.56 В внутрение int readADC (unsigned int ch) { unsigned char set_admux = ADMUX; set_admux &= ~((0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (1<<MUX0)); switch (ch) { case 1: set_admux | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (1<<MUX0);break; default:break; } ADMUX = set_admux; _delay_us(10); int tmp =0; for (int i=0;i<<40;i++) { ADCSRA |= (1<<ADSC); //Запуск преобразователя while ((ADCSRA &(1<<ADSC))); //Ожидание окончания преобразования tmp += ADC; //tmp = tap + ADC; } return tmp/40; } int main(void) { presets(); while(1) { Lcd_clear(); Lcd_printf(0,0, FONT_1X,((readADC(0)*2.56*(30/2.56))/1023), 1); Lcd_printf(0,1, FONT_1X,(readADC(1)*0.02935), 1); Lcd_update(); _delay_ms(200); } } Warning 2 'main' is normally a non-static function [-Wmain] Lessons7.c 41 5 Lessons7 Error 3 expected declaration or statement at end of input Lessons7.c 53 1 Lessons7 Warning 1 left shift count >= width of type [enabled by default] Lessons7.c 33 2 Lessons7
  13. Кто сделал домашние задание к уроку №6, можете выложить код в атмел студии? Для начинающего этого не сделать, зато можно проанализировать ход, что лучше будит понять.... За ранее спасибо.
  14. https://fotki.yandex...81/view/1475207 Вот получилось. В протеусе нажав на экран убрал лишние галочки и заново проверил как правильно вложил файлы в папки программы протеуса. Продолжаю дальнейшее изучение. Спасибо за ваше мнение. Вопрос, на практике с дисплеем, там тоже будит надпись Demo Version или это только в протеусе?
  15. Протеус 7. Пытался вставить изображение в сообщении на сайте, не получилось. Экран с белыми точками, даже видна немного надпись демо версии. Через Алиэкспресс заказал 10 шт. дисплеев для эксперимента и поделок. Возможно получится на практике, когда известно, что не правильно работает в протеусе.. Если не выйдет , тогда перейду на цифровую индикацию. А , так давно понял, что с ломаными программами всегда проблема. https://fotki.yandex.ru/next/users/an-s-1/album/527281/view/1475033
×
×
  • Создать...