Нескольно простых вопросов о программировании AVR на Си.
Re: Нескольно простых вопросов о программировании AVR на Си.
Yarikkasl, смотрите прошлый ответ. Если в одном байте вам можно сразу посылать несколько бит команд, то можно делать так, как я написал выше. Но всё зависит от протокола - можно ли там сразу в одном байте посылать несколько разных битов команд. Или же как-то пакетно, или вообще по-байтно запрашивать. Всё зависит от отвечающего ус-ва и его протокола.
-
Yarikkasl
- Первый раз сказал Мяу!
- Сообщения: 24
- Зарегистрирован: Чт май 23, 2019 07:59:45
- Откуда: Екатеринбург
Re: Нескольно простых вопросов о программировании AVR на Си.
NStorm, понял понял, будут пытаться дальше спасибо!
-
Compressor
- Открыл глаза
- Сообщения: 41
- Зарегистрирован: Пт май 29, 2009 09:38:45
Re: Нескольно простых вопросов о программировании AVR на Си.
Приветствую!
В статье непонятно чем руководствовался человек чтобы занести данные в регистр в дополнительном коде (-128; +127)
В функции
зачем прибавлять 256 если переменная offset (как и все прочие) уже и так представлена в дополнительном коде (проверено в симуляторе Atmel Studio)
От прибавления 256 младший байт (который и пойдет в регистр) битовое представление не меняется. Смысл этого не понятен, хочется разобраться
Если сделать так
то результат тот-же (если например отправляем десятичное (-128) offset будет 0x80 или 0b10000000 т.е. что и требуется)
В статье непонятно чем руководствовался человек чтобы занести данные в регистр в дополнительном коде (-128; +127)
В функции
Код: Выделить всё
void setAgingOffset(int offset)
{
if (offset < 0) offset += 256;
Wire.beginTransmission(DS3232_I2C_ADDRESS);
Wire.write(0x10);
Wire.write(offset);
Wire.endTransmission();
}зачем прибавлять 256 если переменная offset (как и все прочие) уже и так представлена в дополнительном коде (проверено в симуляторе Atmel Studio)
От прибавления 256 младший байт (который и пойдет в регистр) битовое представление не меняется. Смысл этого не понятен, хочется разобраться
Если сделать так
Код: Выделить всё
void setAgingOffset(char offset)
{
Wire.beginTransmission(DS3232_I2C_ADDRESS);
Wire.write(0x10);
Wire.write(offset);
Wire.endTransmission();
}то результат тот-же (если например отправляем десятичное (-128) offset будет 0x80 или 0b10000000 т.е. что и требуется)
Re: Нескольно простых вопросов о программировании AVR на Си.
Скажите, была ли тема про эффекты анимации на семисегментном LED индикаторе?
-
Yarikkasl
- Первый раз сказал Мяу!
- Сообщения: 24
- Зарегистрирован: Чт май 23, 2019 07:59:45
- Откуда: Екатеринбург
Re: Нескольно простых вопросов о программировании AVR на Си.
Здравствуйте! Создал проект опроса матричной клавиатуры, все прекрасно компилируется, но вот не задача, в протеусе программа как то странно себя ведет: зависает нажимаю на кнопки а она реагрирует будто я нажал на другую кнопку, я понимаю если не работает. Вобщем что то я застрял. Про прерывания читал, но реализовал так как смог
Добавлено after 3 hours 44 minutes 4 seconds:
Добавление диода на 56 ноге (pf6) вопрос решило, но если я правильно понимаю то все должно работать и без диодов
Добавлено after 3 hours 44 minutes 4 seconds:
Добавление диода на 56 ноге (pf6) вопрос решило, но если я правильно понимаю то все должно работать и без диодов
- Вложения
-
- Proteus.rar
- (30.73 КБ) 265 скачиваний
-
- Новый документ(10).txt
- (1.83 КБ) 348 скачиваний
Re: Нескольно простых вопросов о программировании AVR на Си.
Вопрос:
Нужно чтобы после выполнения процедуры вызваной внешним прерыванием основная программа выполнялась с начала, а не с места где ее прервали. Это можно как-то реализовать? Или только общим сбросом ?
Нужно чтобы после выполнения процедуры вызваной внешним прерыванием основная программа выполнялась с начала, а не с места где ее прервали. Это можно как-то реализовать? Или только общим сбросом ?
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Как вариант, включить watchdog, в прерывании уйти в глухой цикл. Но, само решение не ахти.
Когда задаёте подобные вопросы, указывайте, что за устройство, что выполняет программа.
Думаю, что ответ на ваш вопрос - это конечный автомат.
Когда задаёте подобные вопросы, указывайте, что за устройство, что выполняет программа.
Думаю, что ответ на ваш вопрос - это конечный автомат.
Re: Нескольно простых вопросов о программировании AVR на Си.
Или рестартонуть с 0 в конце прерывания. В зависимости от того что хотите получить в итоге.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Нескольно простых вопросов о программировании AVR на Си.
В стеке исправить адрес возврата ...
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Весь вопрос в том, что на куа такой метод? Я тоже такой херней страдал поначалу. Вернуться в начало, как у ТС, либо уйти куда мне надо.
Это говорит о том, что человек не имеет понятия, что он хочет сделать. Также не имеет понятия о реакции системы. Организации программ. Это болезнь начинающих. Быстрее, попроще. Хотя на самом деле, времени вагон и маленькая тележка. Как и способов решить вопрос ТС другими методами.
Это говорит о том, что человек не имеет понятия, что он хочет сделать. Также не имеет понятия о реакции системы. Организации программ. Это болезнь начинающих. Быстрее, попроще. Хотя на самом деле, времени вагон и маленькая тележка. Как и способов решить вопрос ТС другими методами.
Re: Нескольно простых вопросов о программировании AVR на Си.
Добрый день! Возможно ли что сгорел пин атмеги8? В цикле отправлял с юарта в м/с max485 один символ, около мин 10. После пелетел шум, и иефроглифы ascii. Частота 8МГц. max485 перегревался, стаб lm7805 тоже.
while(1){
USART_Transmit('R');
_delay_us(100);
}
while(1){
USART_Transmit('R');
_delay_us(100);
}
Re: Нескольно простых вопросов о программировании AVR на Си.
Если max485 греется, так может быть она то и сдохла, а не мега8.
Re: Нескольно простых вопросов о программировании AVR на Си.
max485 уже поменял 2 штуки, потом лог анализатором посмотрел с tx шум летел
Re: Нескольно простых вопросов о программировании AVR на Си.
Ну значит только заменой меги8 можно понять где проблема.
Re: Нескольно простых вопросов о программировании AVR на Си.
[uquote="dibor",url="/forum/viewtopic.php?p=3909736#p3909736"]Ну значит только заменой меги8 можно понять где проблема.[/uquote]
Все разобрался, сопля была возле tx на дорожку 5 вольт, 3 часа ушло на поиски ((
Все разобрался, сопля была возле tx на дорожку 5 вольт, 3 часа ушло на поиски ((
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Бывает. Есть два типа ошибок. Программный. Аппаратный. Опыт - сын ошибок трудных....
Re: Нескольно простых вопросов о программировании AVR на Си.
Добрый вечер! Пытаюсь постигать как передавать по UART в терминал. Как вывести числа додумался, а вот как чтобы с новой строки каждое шло, нет... или через запятую, но одной строкой... помоги, че т прям буксую)))
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
char buffer [16]; //Буфер UART
***
ftoa(adc, 2 ,buffer); //ftoa(float n,unsigned char decimals,char *str);
puts(buffer); //puts(char *str);
itoa(PERIOD_ON,buffer); //void itoa(int n,char *str);
puts(buffer);- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Передавать символы перехода на новую строку и возврата каретки или запятой.
Re: Нескольно простых вопросов о программировании AVR на Си.
[uquote="WiseLord",url="/forum/viewtopic.php?p=3968846#p3968846"]Передавать символы перехода на новую строку и возврата каретки или запятой.[/uquote]
Теорию мы оспаривать не будем! Хотя и теория не помешала бы, методы в уроках расписаны так себе. Нам практика нужна, как это делается и чем! Printf() ; - не катит... Код можете привести наглядно показать?
Re: Нескольно простых вопросов о программировании AVR на Си.
Код: Выделить всё
***
ftoa(adc, 2 ,buffer); //ftoa(float n,unsigned char decimals,char *str);
puts(buffer); //puts(char *str);
puts(", ");
itoa(PERIOD_ON,buffer); //void itoa(int n,char *str);
puts(buffer);
puts("\n");
