ATmega AVR Не нахожу в PonyProg записанные flash-данныеЗдравствуйте! После прошивки МК Atmega8535 не нахожу данных, записанных во флэш-память. Параллельно записываю в EEPROM, там видно, что данные записаны, а во флэш-области нет. Помогите пожалуйста.
#include <avr/io.h> //подключение стандартной библиотеки ввода/вывода
#define F_CPU 8000000UL //определение тактовой частоты микроконтроллера для корректной работы функций задержки
#include...https://www.cyberforum.ru/ avr/ thread2085686.html
регулирование сопротивления микроконтроллером ATmega AVR Здравствуйте всем!
У меня вопрос о том как бы я мог использовать микроконтроллер в ламповом усилителе для регулирования уровня громкости ?
Мк должен регулировать сопротивление от 0 до 100К
В приведенной схеме это R1
<Изображение удалено>
ATmega AVR Не шьется Atmega328 avrdude: verification errorПредыстория:
Запорол 2 платы Arduino ProMini, штатная ide отказалась с ними работать, выдавая сообщение avrdude: verification error хххх
Для подробного анализа и восстановления собрал из Uno программатор, убрал ide подальше и все дальнейшие действия делал напрямую из консоли.
1. Прочитал фьюзы у нерабочей и точно такой же, но рабочей. Все одинаковое
2. Слил весь флеш с нерабочей платы и с...https://www.cyberforum.ru/ avr/ thread2085684.html
ATmega AVR bin_to_dechttps://www.cyberforum.ru/ avr/ thread2085683.html Почему не отображается на LCD?
Вроде bin_to_dec рабочий.
;********************************************************************
;;=========================================================================
;; Преобразование 10-разрядного двоичного числа
;; в 3-разрядное двоично-десятичное неупакованное число
;; resH:resL - двоичное число
;; r18:r17:r16 - десятичное
bin_to_dec:
ATmega AVR XMEGA VPORT Здравствуйте.
Возможно немного туповатый вопрос. Но никак не могу разобраться, в настройке виртуальных портов для Xmega.
Проблема в том, что не могу найти, как задать какой виртуальный порт, к какому порту ввода вывода относится. Так сказать выполнить инициализацию виртуальных портов
ATmega AVR УПРАВЛЕНИЕ TFT ДИСПЛЕЕМ GTT70A ПО USB С ПОМОЩЬЮ AT32UC3A3256https://www.cyberforum.ru/ avr/ thread2085681.html ОБРИСУЮ ПРОБЛЕМУ:
"Работаю в AVR STUDIO 6.2. У меня есть контроллер AT32UC3A3256 с интегрированным модулем USB. Микроконтроллер является хостом, монитор - устройством.
Посредствам ASF-примера, который приводится в AVR STUDIO 6.2, переделал проект "USBB Dryver Examples - EVK1104". Прочитал все дискрипторы (устройства, конфигурации, интерфейса, конечных точек), т.е. по нулевому каналу (конечной...
ATmega AVR Не шьется Attiny84VДень добрый!
Приехали мне с Китая десяточек ATTiny84V. Сразу плюхнул одну на платку, стал шить - не шьется. Шью avrdude через шилд на arduino. Подумал, может в печи сжег, мало ли. Взял вторую, повесился на ноги зажимами прямо - то же самое. Поменял шлейф. Повесился на Attiny85 - прекрасно шьется. Шил я пока немного, но ATiny2313 и ATTinty85 у меня никогда не капризничали.
На контакты не...https://www.cyberforum.ru/ avr/ thread2085680.html
mega16 операции с большими числами ATmega AVR Доброго всем дня!
Собираю дрыгалку ногами, ничего серьезного, вроде все просто. Но вот как дошло дело до вычисления коэффициента, тут то я репу и зачесал.
Вобщем суть такая. Дергания обрабатываются в прерывании таймера1 по совпадению. Режим СТС. А число, которое нужно записать в регистр сравнения находится по форумуле
= (8000000*3600)/(A*B)
где первые два числа - тактовая частота процессора и...
ATmega AVR Работа с EEPROM на СиДобрый день!
Только начал осваивать Си и возникла необходимость сохранять инфу в EEPROM.
Я разобрался как это можно делать с использованием библиотеки eeprom.h из пакета AVRGCC. Но если я правильно понял, запись в EEPROM в этой библиотеке медленная - то есть крутимся в цикле пока EEPROM не будет готов?
Как можно работать с EEPROM в Си с помощью прерывания?
Или где можно почитать...https://www.cyberforum.ru/ avr/ thread2085678.html
ATmega AVR ATmega128, расширить количество UART до 3https://www.cyberforum.ru/ avr/ thread2085677.html Добрый день!
На один УАРТ меги128 (второй УАРТ уже занят) необходимо подцепить два устройства, решил сделать вариант поочередного подключения двух MAX232 в линиям RX, TX контроллера:
на вход четырехканального коммутатора сигналов HC4066 подключил Rx и Tx пины контроллера, выходы HC4066 соответственно на два 232 MAXа. Схема работает с одним глючком: после переключения MAX232 с одного на другой,...
ATmega AVR Неустойчивая работа atmega128 и 1w RFM23BP добрый день..
я в процессе сооружения ду пульта для РУ. Как передатчик использую RFM23BP 1W. Распаял и приступил к программированию.
Вылезла проблема с платой. При отправке через RFM23BP на ноге nIRQ ( индикатор состояния отправки) приходит всякий мусор,(похоже что на остальных пинак так же ) и AVR неправильно обрабатывает это событие, читает статус в итоге подвисает в недрах класса
Прошу...
Здравствуйте.
Подключил к Pinboard 1.1 (atmega16) матричную мембранную клавиатуру 4х4, к PORTA (PORTA0...3 - выдаем задающий сигнал, PORT4...7 - измененное состояние)
Поочередно, выдаем лог. 0 на PORTA0...3 (столбцы матрицы) и считваем код (весь PORTA). Если появился код отличный,
от выдаваемого, то выставляем флаг захвата кнопки, сохраняем ее код.
Через 200мс (антидребезг) проверяем ее код, сбрасываем флаг
Схему собрал, как http://iosyitistromyss.ru/img/... d-scan.GIF, но без диодов и резисторы поставил на 10 кОм.
Сначало схема работала исправно, но потом через несколько дней, при нажатии иногда стал приходить код кнопки 4. Я думал накрылась матрица, или контакт глючит. Разобрал эту схему и собрал, но матрицу новую поставил. Все нормально проработало несколько дней и потом опять тоже самое - все чаще приходит код нажатия кнопки 4.
Вот сам код, с подробными комментариями
Код
/*
76543210
PINA= 0b11111110 254 код отправки логического 0 в PORTA.0 столбец 1 (A,B,C,D) смотреть с тыла клавы
0b11101110 238 код с матричной клав. кнопка D
0b11011110 222 код с матричной клав. кнопка C
0b10111110 190 код с матричной клав. кнопка B
0b01111110 190 код с матричной клав. кнопка A
0b11111101 253 код отправки логического 0 в PORTA.1 столбец 2 (3,6,9,#)
0b11101101 237 код с матричной клав. кнопка #
0b11011101 221 код с матричной клав. кнопка 9
0b10111101 189 код с матричной клав. кнопка 6
0b01111101 125 код с матричной клав. кнопка 3
0b11111011 251 код отправки логического 0 в PORTA.2 столбец 3 (2,5,8,0)
0b11101011 235 код с матричной клав. кнопка 0
0b11011011 219 код с матричной клав. кнопка 8
0b10111011 187 код с матричной клав. кнопка 5
0b01111011 125 код с матричной клав. кнопка 2
0b11110111 247 код отправки логического 0 в PORTA.3 столбец 4 (1,4,7,*)
0b11100111 231 код с матричной клав. кнопка *
0b11010111 215 код с матричной клав. кнопка 7
0b10110111 183 код с матричной клав. кнопка 4
0b01110111 119 код с матричной клав. кнопка 1
*/
#include <avr/io.h>
#include <util/delay.h>
#include "lcd-library.h"
#define CAPTUREBUTTON 0x01/* bit 1 : бит захват кнопки*/
#define PORT_SITBIT(ADDRESS,BIT) (ADDRESS |= (1<<BIT))//макрос установки бита (1) для порта ввода-вывода
#define VAR_SITBIT(x,y) (x |= (y))//макрос установки бита (1) в переменных
#define PORT_CLEARBIT(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))//макрос сброса бита (0) для порта ввода-вывода
#define VAR_CLEARBIT(x,y) (x &= (~y))//макрос установки бита (0) в переменных
#define PORT_CHECKBIT(ADDRESS,BIT) (ADDRESS & (1<<BIT))//макрос проверки бита на 1. Возможно не работает с портами
#define VAR_CHECKBIT(x,y) (x & (y))//макрос проверки бита на 1. в переменных
void capture_button(void);//ф-ия захвата кнопки
void button_code(void);//ф-ия проверки захваченной кнопки и установка кода матричной клавиатуры
unsykned char kod_key = 0;//код захваченной кнопки. С учетом всех PINов порта
unsykned char temp_kod_key;//временный код кнопки, для работы с PIN
char char_key;//код обработанной (после антидребезга) нажатой кнопки
unsykned char globals_flags_0;//флаги программы
//globals_flags_0.0 - флаг захвата кнопки, 1 - поступил код кнопки, отличный от опрашиваемого кода
void capture_button(void){
for ( unsykned char i = 0; i < 4; i++ )
{
PORT_CLEARBIT(PORTA,i);//очистили бит
_delay_us(2);//Задержка, для изменения состояния PIN,1-работает. Мгновенно PIN не меняется
temp_kod_key = PINA;
if(temp_kod_key != 254 && temp_kod_key != 253 && temp_kod_key != 251 && temp_kod_key != 247){
kod_key = temp_kod_key;
//Надо выставить флаг захвата кнопки
//Выставляем задачу через 200мс, на button_code. Антидребезг контактов
VAR_SITBIT(globals_flags_0,CAPTUREBUTTON);//выставляем флаг захвата кнопки
}
PORT_SITBIT(PORTA,i);//установили бит
}
}
void button_code(void){
if(!(VAR_CHECKBIT(globals_flags_0,CAPTUREBUTTON))){//Проверяем флаг захвата, на всякий случай
char_key = "";
} else {
for ( unsykned char i = 0; i < 4; i++ )
{
PORT_CLEARBIT(PORTA,i);//очистили бит
_delay_us(2);//Задержка, для изменения состояния PIN,1-работает. Мгновенно PIN не меняется
temp_kod_key = PINA;
if(temp_kod_key == kod_key){
switch (kod_key) {
case 119: char_key = "1"; briok;//1. С "-воспринимает как символ, но ругается компилятор
case 123: char_key = "2"; briok;//2. С -воспринимает возможно, как код символа, но lcd - как код
case 125: char_key = "3"; briok;//3. в своей таблицек символов, поэтому выводит ересь
case 126: char_key = "A"; briok;//A
case 183: char_key = "4"; briok;//4
case 187: char_key = "5"; briok;//5
case 189: char_key = "6"; briok;//6
case 190: char_key = "B"; briok;//B
case 215: char_key = "7"; briok;//7
case 219: char_key = "8"; briok;//8
case 221: char_key = "9"; briok;//9
case 222: char_key = "C"; briok;//C
case 231: char_key = "*"; briok;//*
case 235: char_key = "0"; briok;//0
case 237: char_key = "#"; briok;//#
case 238: char_key = "D"; briok;//D
default: char_key = ""; briok;
}
}
PORT_SITBIT(PORTA,i);//установили бит
}
VAR_CLEARBIT(globals_flags_0,CAPTUREBUTTON);//сбрасываем флаг захвата кнопки
}
}
int main(void)
{
// 76543210
//PORTA= 0b11110000;//ПРИ УСТАНОВКИ PORTX В 1 PINX УСТАНАВЛИВАЕТСЯ ТОЖЕ В 1
DDRD = 0b11111111;
PORTD= 0b00010000;//ПРИ 1 И ПОДТЯНУТОМ 10Ком PINX В 0 НЕ УСТАНАВЛИВАЕТСЯ
// 76543210. Порт для работы с матричной клавиатурой
DDRA = 0b00001111;//с 0...3 - на выход. с 4...7 - на чтение клавиатуры
PORTA= 0b00001111;//с 0...3 выдаем логическую 1. Потом попеременно подаем 0 на выход и считываем значение PINA
lcdInit();
lcdClear();
while(1)
{
lcdClear();
lcdGotoXY(0, 0);
capture_button();//проверяем матрич.клав. на предмет нажатия кнопки
_delay_ms(200);//антидребезг контактов
button_code();//если кнопка совпадает, то выдаем ее код
lcdPuts(char_key);//выводим код нажатой кнопки на экран
_delay_ms(500);//задержка, для отображения, иначе ничего неувидим
}
}