Нескольно простых вопросов о программировании AVR на Си.
- Сообщения: 1978
- Зарегистрирован: Ср июл 17, 2013 13:55:57
Yarikkasl, смотрите прошлый ответ. Если в одном байте вам можно сразу посылать несколько бит команд, то можно делать так, как я написал выше. Но всё зависит от протокола - можно ли там сразу в одном байте посылать несколько разных битов команд. Или же как-то пакетно, или вообще по-байтно запрашивать. Всё зависит от отвечающего ус-ва и его протокола.
- Реклама
NStorm, понял понял, будут пытаться дальше спасибо!
- Сообщения: 41
- Зарегистрирован: Пт май 29, 2009 09:38:45
Приветствую!
В статье непонятно чем руководствовался человек чтобы занести данные в регистр в дополнительном коде (-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 младший байт (который и пойдет в регистр) битовое представление не меняется. Смысл этого не понятен, хочется разобраться
Если сделать так
Код: Выделить всё
void setAgingOffset(char offset)
{
Wire.beginTransmission(DS3232_I2C_ADDRESS);
Wire.write(0x10);
Wire.write(offset);
Wire.endTransmission();
}Скажите, была ли тема про эффекты анимации на семисегментном LED индикаторе?
Здравствуйте! Создал проект опроса матричной клавиатуры, все прекрасно компилируется, но вот не задача, в протеусе программа как то странно себя ведет: зависает нажимаю на кнопки а она реагрирует будто я нажал на другую кнопку, я понимаю если не работает. Вобщем что то я застрял. Про прерывания читал, но реализовал так как смог
Добавлено 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 КБ) 349 скачиваний
- Реклама
- Сообщения: 403
- Зарегистрирован: Ср янв 26, 2011 17:00:30
Вопрос:
Нужно чтобы после выполнения процедуры вызваной внешним прерыванием основная программа выполнялась с начала, а не с места где ее прервали. Это можно как-то реализовать? Или только общим сбросом ?
Нужно чтобы после выполнения процедуры вызваной внешним прерыванием основная программа выполнялась с начала, а не с места где ее прервали. Это можно как-то реализовать? Или только общим сбросом ?
- Сообщения: 1482
- Зарегистрирован: Ср июн 25, 2008 15:19:44
Как вариант, включить watchdog, в прерывании уйти в глухой цикл. Но, само решение не ахти.
Когда задаёте подобные вопросы, указывайте, что за устройство, что выполняет программа.
Думаю, что ответ на ваш вопрос - это конечный автомат.
Когда задаёте подобные вопросы, указывайте, что за устройство, что выполняет программа.
Думаю, что ответ на ваш вопрос - это конечный автомат.
- Сообщения: 1407
- Зарегистрирован: Вт июн 07, 2011 08:03:18
Или рестартонуть с 0 в конце прерывания. В зависимости от того что хотите получить в итоге.
В стеке исправить адрес возврата ...
- Сообщения: 1482
- Зарегистрирован: Ср июн 25, 2008 15:19:44
Весь вопрос в том, что на куа такой метод? Я тоже такой херней страдал поначалу. Вернуться в начало, как у ТС, либо уйти куда мне надо.
Это говорит о том, что человек не имеет понятия, что он хочет сделать. Также не имеет понятия о реакции системы. Организации программ. Это болезнь начинающих. Быстрее, попроще. Хотя на самом деле, времени вагон и маленькая тележка. Как и способов решить вопрос ТС другими методами.
Это говорит о том, что человек не имеет понятия, что он хочет сделать. Также не имеет понятия о реакции системы. Организации программ. Это болезнь начинающих. Быстрее, попроще. Хотя на самом деле, времени вагон и маленькая тележка. Как и способов решить вопрос ТС другими методами.
- Сообщения: 214
- Зарегистрирован: Чт май 23, 2013 18:31:58
Добрый день! Возможно ли что сгорел пин атмеги8? В цикле отправлял с юарта в м/с max485 один символ, около мин 10. После пелетел шум, и иефроглифы ascii. Частота 8МГц. max485 перегревался, стаб lm7805 тоже.
while(1){
USART_Transmit('R');
_delay_us(100);
}
while(1){
USART_Transmit('R');
_delay_us(100);
}
- Сообщения: 25
- Зарегистрирован: Чт авг 27, 2020 13:15:49
Если max485 греется, так может быть она то и сдохла, а не мега8.
- Сообщения: 214
- Зарегистрирован: Чт май 23, 2013 18:31:58
max485 уже поменял 2 штуки, потом лог анализатором посмотрел с tx шум летел
- Сообщения: 25
- Зарегистрирован: Чт авг 27, 2020 13:15:49
Ну значит только заменой меги8 можно понять где проблема.
- Сообщения: 214
- Зарегистрирован: Чт май 23, 2013 18:31:58
[uquote="dibor",url="/forum/viewtopic.php?p=3909736#p3909736"]Ну значит только заменой меги8 можно понять где проблема.[/uquote]
Все разобрался, сопля была возле tx на дорожку 5 вольт, 3 часа ушло на поиски ((
Все разобрался, сопля была возле tx на дорожку 5 вольт, 3 часа ушло на поиски ((
- Сообщения: 1482
- Зарегистрирован: Ср июн 25, 2008 15:19:44
Бывает. Есть два типа ошибок. Программный. Аппаратный. Опыт - сын ошибок трудных....
- Сообщения: 228
- Зарегистрирован: Пн окт 04, 2010 11:55:41
Добрый вечер! Пытаюсь постигать как передавать по 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);Передавать символы перехода на новую строку и возврата каретки или запятой.
- Сообщения: 228
- Зарегистрирован: Пн окт 04, 2010 11:55:41
[uquote="WiseLord",url="/forum/viewtopic.php?p=3968846#p3968846"]Передавать символы перехода на новую строку и возврата каретки или запятой.[/uquote]
Теорию мы оспаривать не будем! Хотя и теория не помешала бы, методы в уроках расписаны так себе. Нам практика нужна, как это делается и чем! Printf() ; - не катит... Код можете привести наглядно показать?
- Сообщения: 1978
- Зарегистрирован: Ср июл 17, 2013 13:55:57
Код: Выделить всё
***
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");



