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

Alek_von_German

Members
  • Постов

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

  • Посещение

Информация о Alek_von_German

  • День рождения 25.08.1993

Информация

  • Пол
    Мужчина
  • Город
    где-то

Электроника

  • Стаж в электронике
    1-2 года
  • Сфера радиоэлектроники
    Микроконтроллеры, ремонт.
  • Оборудование
    Uni-t 136, yihuia 852, c1-93, lw-k3010d

Достижения Alek_von_German

Новичок

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

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

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

0

Репутация

  1. Судя по всему, компилятор будет ругаться на всё что есть в ардуине, имею ввиду на библиотеки. Пробовал и на стандартных примерах-всё тщетно, то кричит на prgmspace, то ещё на что-то. Придется учить питон((( Только елементарный blink спокойно запускается...
  2. Доброго времени. Питаюсь подключить дисплей 20*4 к Raspberry pi pico. Скетч написан в Arduino. Изначально я использовал стандартний пример мигалки для проверки работоспособности малинки, все работало. Но когда я пытаюсь скомпилировать скетч уже для вывода на дисплей, то ide ругается, при этом под саму ардуину всё нормально компилится. Compilation error: invalid conversion from 'int' to 't_backlighPol' [-fpermissive] такую ошибку пишет. Может кто сталкивался или знает как исправить? #include <LiquidCrystal_I2C.h> #include <Wire.h> LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { lcd.init(); lcd.backlight(); } void loop() { delay(1000) lcd.setCursor(0,0); lcd.print(“...”); lcd.setCursor(0,1); lcd.print(“...”); }
  3. Всё получилось. Нужно было в таймера1 понизить частоту. Я поставил 560 герц, теперь таймер0 успевает тикать.
  4. Никто ничего не подскажет?
  5. Вот конкретно для меги8 код, в протеусе работает, в железе только нули загораются, таймер 0 не считает ничего #define F_CPU 8000000UL #include <avr/io.h> #include <avr/interrupt.h> //#include <util/delay.h> const char dig[] = { 0b10000001, //0 0b11110011, //1 0b01001001, //2 0b01100001, //3 0b00110011, //4 0b00100101, //5 0b00000101, //6 0b11110001, //7 0b00000001, //8 0b00100001, //9 0b00000000};//пусто const char razr[] = { 0b11111110, 0b11111101, 0b11111011, 0b11110111}; unsigned char display[2]; volatile unsigned char i, a=0; volatile unsigned int z=0; unsigned char dig1, dig2, dig3, dig4; void init_timer0() { TCCR0 =(1<<CS02)|(1<<CS00); TCNT0 =255; TIMSK|=1<<TOIE0; sei(); } void init_timer1() { TCCR1A = 0x00; TCCR1B = (1<<WGM12) | (1<<CS11) | (1<<CS10); TCNT1H = 0; TCNT1L = 0; OCR1A =1; TIMSK |= (1<<OCIE1A); sei(); } void counter0(void) { a++; } ISR(TIMER0_OVF_vect) { TCNT0=255; counter0(); } void write_display(unsigned char *data) { unsigned char mask,i; for(i = 0; i < 2; i++) { mask = 0x80; for(char k = 0; k < 8; k++) { // Сравниваем каждый бит с единицей if(data[i] & mask) { PORTB |= (1 << 0); // DATA 1 PORTB |= (1 << 1); // CLK 1 PORTB &= ~(1 <<1); // CLK 0 } else { PORTB &= ~(1 << 0); // DATA 0 PORTB |= (1 << 1); // CLK 1 PORTB &= ~(1 << 1); // CLK 0 } mask = mask >> 1; // Сдвигаем биты } } // Защелкиваем регистр PORTB |= (1 << 2); PORTB &= ~(1 << 2); } ISR (TIMER1_COMPA_vect) { dig4=dig[z % 10000 / 1000]; dig3=dig[z % 1000 / 100]; dig2=dig[z % 100 / 10]; dig1=dig[z % 10]; display[0] = razr[3]; display[1] = ~ dig4; write_display(display); display[0] = razr[3]; display[1] = dig[10]; write_display(display); display[0] = razr[2]; display[1] = ~ dig3; write_display(display); display[0] = razr[2]; display[1] = dig[10]; write_display(display); display[0] = razr[1]; display[1] = ~dig2; write_display(display); display[0] = razr[1]; display[1] = dig[10]; write_display(display); display[0] =razr[0]; // в крайний левый символ display[1] =~ dig1; // выводится цифра write_display(display); display[0] = razr[0]; // в крайний левый символ display[1] = dig[10]; // выводится цифра write_display(display); // и посылается на 74hc595 } /* */ int main(void) { DDRB = 0xFF; PORTB = 0x00; DDRC = 0xff; PORTC = 0x03; init_timer0(); init_timer1(); while (1) { if (a>10) { z++; PORTC^=1<<5; a=0; } } }
  6. это я на атмега328 портировал... там такие регистры стоят
  7. Доброго времени всем. Сижу осваиваю таймеры на atmega8. Играюсь с разными режимами работы и т.д. Только вот непоняточка вышла одна, timer0 работающий в proteus не работает в железе, хотя параллельно ему работает timer1. Я сначала подумал, что контроллер гавкнул, заменил- результат тот же. Потом решил переключить на timer2, при таких же настройках он заработал на всех камнях, а вот нулевой не хочет. Даже 328-ю мегу взял, и на ней ничего не заработало... Поправте меня, можт это я туплю и его отдельно где включать нужно? #define F_CPU 8000000UL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> char dig[] = {0b10000001, 0b11110011, 0b01001001, 0b01100001, 0b00110011, 0b00100101, 0b00000101, 0b11110001, 0b00000001, 0b00100001, 0b00000000}; char razr[] = {0b11111110, 0b11111101, 0b11111011, 0b11110111}; unsigned char display[2]; unsigned char i, a=0; unsigned int z=0; unsigned char dig1, dig2, dig3, dig4; ISR(TIMER0_OVF_vect) { TCNT0=178; a++; if (a>10) { z++; a=0; } } void write_display(unsigned char *data) { unsigned char mask,i; for(i = 0; i < 2; i++) { mask = 0x80; for(char k = 0; k < 8; k++) { // Сравниваем каждый бит с единицей if(data[i] & mask) { PORTB |= (1 << 0); // DATA 1 PORTB |= (1 << 1); // CLK 1 PORTB &= ~(1 <<1); // CLK 0 } else { PORTB &= ~(1 << 0); // DATA 0 PORTB |= (1 << 1); // CLK 1 PORTB &= ~(1 << 1); // CLK 0 } mask = mask >> 1; // Сдвигаем биты } } // Защелкиваем регистр PORTB |= (1 << 2); PORTB &= ~(1 << 2); } ISR (TIMER1_COMPA_vect) { dig4=dig[z % 10000 / 1000]; dig3=dig[z % 1000 / 100]; dig2=dig[z % 100 / 10]; dig1=dig[z % 10]; display[0] = razr[3]; display[1] = ~ dig4; write_display(display); display[0] = razr[3]; display[1] = dig[10]; write_display(display); display[0] = razr[2]; display[1] = ~ dig3; write_display(display); display[0] = razr[2]; display[1] = dig[10]; write_display(display); display[0] = razr[1]; display[1] = ~dig2; write_display(display); display[0] = razr[1]; display[1] = dig[10]; write_display(display); display[0] =razr[0]; // в крайний левый символ display[1] =~ dig1; // выводится цифра write_display(display); display[0] = razr[0]; // в крайний левый символ display[1] = dig[10]; // выводится цифра write_display(display); // и посылается на 74hc595 } /* */ int main(void) { DDRB = 0xFF; PORTB = 0x00; DDRC=0xff; PORTC=0x03; TCCR0A=0; TCNT0=178; TCCR0B=(1<<CS02)|(1<<CS00); TIMSK0|=1<<TOIE0; TCCR1A = 0x00; TCCR1B = (1<<WGM12) | (1<<CS11) | (1<<CS10); TCNT1H = 0; TCNT1L = 0; OCR1A=5; TIMSK1 |= (1<<OCIE1A); sei(); while (1) { } }
×
×
  • Создать...