![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
VladimirYU
-
Постов
426 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные VladimirYU
-
-
Здравствуйте.
Есть у меня несколько atmega128, обьединённых через RS-485 интерфейс, построенный на UARTе. Одна из них ведущая, все остальные - ведомые.
Подскажите пожалуйста, какие есть методы распределения адресов ведомых устройств на такой шине?
В данный момент адреса каждой из ведомых atmegа128 задаются джамперами на плате, подключенными к порту.
А что не устраивает а вашем способе, или чего хотелось бы?
-
Для МК еще пишут на Forth ( Форт) например:)
В жизни всегда есть место экзотике, но не всегда в это место хочется попадать.
-
А если отбросить религиозные убеждения и просто, например, ответить на единственный вопрос:
"На чем я пишу ПО для МК? С, С++, ASM, Паскаль......" ИМХО все споры отпадут сами собой.
-
Спасибо за ответы и просмотры. Решение найдено, пока полет нормальный :)
Все таки поделитесь с народом, в чем была проблема и как разрешилась. Получется, что топик затеяли и все?
-
Спасибо за ссылку. С одной строны, я поржал от души, а с другой строны неприятно осознавать, что в руководстве страны сидят такие жопоголовые кормчие.
Мда, травка зашибись была...
-
Нет, не на плате расширения. С питанием нормально - ровно 5 вольт подаеться (мерял мультиметром). Про результаты программирования напишу после обеда.
Проверьте доходит ли ресет от прграмматора до ноги МК.
-
Добрый день... Начал пробовать программировать на С++, переделываю старый поект написанный на С и сталкнулся с проблемой, у классов обьявленных как глобальные не вызываються конструкторы. Есть предположение что это фишка IAR. В чём может быть проблема? Где можно почитать про использование C++ и в частности ООП для программирования контроллеров? Заранее благодарен.
Нет. примерчик покажите.
-
Да я так и сделал. А теперь ищу, что именно подойдет, чтобы "не дорого и со вкусом". :)
Может кто подскажет, что лучше выбрать?
Дорогие - это по 15-20$
А хотелось бы за 8-10$.
Очень уж ограничен финансово!
Я имею ввиду амплитуду.
Выбрал АЦП ADS8320EB Техаса. Стоит 10$. Так как всетаки по SPI с ним общаться?
Точнее как правильно настроить SPI контроллера МЕГА16. Программирую
в CVAVR.
Внимательно посмотрите на временные диаграммы АЦП (он Слэйвом у вас будет) (фазировка SCK, порядок передачи битов, ...) не забудьте про SS ( CS не знаю как он в Вашем АЦП называется) и сравните их и Fig. 67, 68 из DS на мегу 16. Выбирите нужную, а далее раберетесь как правильно запрограммировать SPI меги.
Посмотрите в инете методы измерения амплитуды синусоиды, выбирайте подходящий для вашего случая удолетворяющий схемотехнике устройства и возможностям АЦП.
-
Ломают и при том давно :( ... К примеру ATmega8515 TQFP-44 стоимость порядка 200$ у китайцев чтоб сломать ее ...
Один удар молотком - 200$
Два удара - 350
..............
Каждый десятый - бесплатно :) .
Вы сами этим пользовались?
-
Тема неисчерпаема. Но ни от кого и ни где я не слышал слов типа: "Я делал это, и получил необходимый результат". Все на уровне слов "Хня эта защита. Китайцы, нанайцы, тайваньцы и прочие заср..цы в два счета сломают.."
-
Нужно мерять синусоиду амплитудой до 50 мВ(буду усиливать до 2.5В). Точность - 0,01мВ (т.е. после усиления - 0,5мВ). Частота сигнала 10 кГц. Подсчитал, что нужно 13 разрядов.
Что вы вкладываете в слова "мерять синусоиду"? Какой(ие) параметр(ы)?
-
например так:
class TMyclass { ...... public: ....... int foo; // член класса указатель, но который хочу пердать в функцию ........ void Func ( int* ptr); void Func () { Func(&foo); } };
Спасибо!
Все заклинило блин...
Про перегрузку совсем забыл.
-
Как правильно сделать?
Имеется следующий код
class TMyclass{
......
public:
.......
int foo; // член класса указатель, но который хочу пердать в функцию
........
void Func ( int* ptr = &foo);
};
Error[Pe245]: a nonstatic member reference must be relative to a specific object
Хочется, чобы Func получала указатель на foo,
как значение параметра по умолчанию.
-
Вот что Atmel думает об этом:
Я думаю также будет полезно прочитать FAQ#30 в avr-libc-user-manual:
How do I perform a software reset of the AVR?
Анатолий.
+1000.
Пора, уже понять и "принять к исполнению", тот факт, что у AVR нет иного "правильного" программного сброса, кроме как с использованием WDT. Все остальное от лукавого.
-
регистр PIN в студии служит для имитации ВНЕШНЕГО уровня, т.е. то, что вы там зададите - то и будет. автоматом с "подтяжек" на PIN единичка не приходит.
это не баг, а фича - к ней просто надо привыкнуть :)
В симуляторе SPY от IAR аналогично.
-
С одной стороны ARM (SPI Master), с другой ATMega8535L. (Тактируется внутренним RC - 8Мгц)
Частота SPI - 1МГц.
/* Wait for reception complete */
while(!(SPSR & (1<<SPIF))) {}; // <<< --- Такое ощущение, что здесь }[/code]
Что я делаю не так ? Есть какие то идеи ?
У меня один раз было на двух мегах 128-ых из одной партии:
После выхода из while у SLAVE в SPDR проскакивала всякая хрень, ошибка была в бите который мастер выталкивал последним. Посмотрел осциллом передачу от Мастера и ох...ел, 7 битов вытакивались равномероно с частотой клоков, как положено, а последний бит выталкивался (и последний 8-ой клок) после паузы примерно на время передачи байта, а следующий байт сообщения от Мастера шел сразу за последним битом. У слэйва крыша съезжала. Обошел следующим образом: вставил задержку у мастера между посылками байтов - помогло. Потом в следующей версии ПО передачу от мастера сделал по прераванию от SPIF и подобной прооблемы не было. В последующих приборах проверял обе версии ПО для Мастера, больше этот косяк не всплывал. В итоге списал все на глюк в конкретной меге.
-
..... язык С скучный, хочу вот паскаль освоить...
Спасибо.
Язык С объективно лучше учитывает суть и особенности программировани встроенных систем,
ПАСКАЛЬ же язык изучения основ программирования для школьников и начинающих студентов (корни его именно оттуда).
ИМХО, конечно, Вы найдете и освоите компилятор ПАСКАЛя, но это будет потерянное время и усилия на освоение инструмента, предназначенного изначально для других задач.
-
Рискну повторить вопрос aaarrr из поста №38 - у вас точно не включен режим C++?
Конечно, Сергей, прав :a14:
В режиме С все читается нормально, был С++.
-
Может где-то отвалилась volatile-ность __io_memory
Такой глюк был в версии IAR3.20C, регистры I/O оптимизатор глазом не моргнув кэшировал. Но потом в начиная с 3.20D вроде его исправили.
Попробую просто с обычной переменной.
9 int main()\ main:
10 {
11
12 volatile unsigned char vol_var;
13 vol_var;
14 return 0;
\ 00000000 E000 LDI R16, 0
\ 00000002 E010 LDI R17, 0
\ 00000004 9508 RET
15 }
То же самое
9 int main()\ main:
10 {
\ 00000000 9721 SBIW R29:R28, 1
11
12 volatile unsigned char vol_var;
13 unsigned char novol_var = vol_var;
\ 00000002 8108 LD R16, Y
\ 00000004 2F20 MOV R18, R16
14 return 0;
\ 00000006 E000 LDI R16, 0
\ 00000008 E010 LDI R17, 0
\ 0000000A 9621 ADIW R29:R28, 1
\ 0000000C 9508 RET
15 }
-
Они там описаны как __io union, никаких volatile в помине нет.__io Controls the storage of data objects in I/O memory space, alternatively data memory
space.
The __io memory attribute implies that objects are __no_init and volatile, and allows
objects to be accessed by use of the special I/O instructions in the AVR microcontroller.
Your application may access the AVR I/O system by using the memory-mapped internal
special function registers (SFRs). To access the AVR I/O system efficiently, the __io
memory attribute should be included in the code.
Address range Max object size Pointer size Memory space
0-0x3F 4 bytes (32 bits) Pointers not allowed I/O
0x60-0xFF 4 bytes (32 bits) Pointers not allowed Data
Table 64: I/O address ranges
-
Они там описаны как __io union, никаких volatile в помине нет.
Разочарую Вас. Сорри, но не умею выделять в окошке кодов:
__io Controls the storage of data objects in I/O memory space, alternatively data memoryspace.
The __io memory attribute implies that objects are __no_init and volatile, and allows
objects to be accessed by use of the special I/O instructions in the AVR microcontroller.
Your application may access the AVR I/O system by using the memory-mapped internal
special function registers (SFRs). To access the AVR I/O system efficiently, the __io
memory attribute should be included in the code.
Address range Max object size Pointer size Memory space
0-0x3F 4 bytes (32 bits) Pointers not allowed I/O
0x60-0xFF 4 bytes (32 bits) Pointers not allowed Data
Table 64: I/O address ranges
-
Это вообще просто "C" - начиная с K&R. Совершенно переносимо.
Только если выражение после ? не пустое.
Therefore, the expressionx ? : y
has the value of x if that is nonzero; otherwise, the value of y.
This example is perfectly equivalent to
x ? x : y
Евгений абсолютно прав.
-
Листинг посмотреть можно?
Если "тупо"
10 { 11 char tmp = SPCR; \ 00000000 B10D [b]IN R16, 0x0D[/b] \ 00000002 2F20 MOV R18, R16 12 13 return; \ 00000004 E000 LDI R16, 0 \ 00000006 E010 LDI R17, 0 \ 00000008 9508 RET \ 0000000A REQUIRE _A_SPCR 14 }
Если с "изыском"
9 int main() \ main: 10 { 11 SPCR; 12 13 return; \ 00000000 E000 LDI R16, 0 \ 00000002 E010 LDI R17, 0 \ 00000004 9508 RET 14 }
Листинг посмотреть можно?Еще один из обсуждавшихся вариантов:
9 int main() \ main: 10 { 11 [b](void)SPCR;[/b] 12 13 return; \ 00000000 E000 LDI R16, 0 \ 00000002 E010 LDI R17, 0 \ 00000004 9508 RET 14 }
То же самое. Чтения нет.
-
Значит SPSR не volatile, или используется старый плюсовый IAR. По-моему, дискуссия пошла на второй круг.
SPSR это регистр статуса SPI, все I/O регистры описаны в .h как VOLATILE
компилятор отнюдь не старый, проверил на IAR AVR 5.10 то же самое.
Может быть из-за моей неграмотности, но я так и не понял это все же баг
компилятора, или если данная форма отдана стандартом на реализацию, тогда фитча.
адресация устройств на шине RS-485 для AVR
в В помощь начинающему
Опубликовано · Пожаловаться
Это возможно при поочередном подключению к сети ведомых устройств, по умолчанию настроенных на default-адрес, например 127. Мастер опрашивает этот адрес, если есть ответ, то назначает специальной инструкцией устройству адрес, которого в сети еще нет (например по возрастанию, запоминая первый свободный адрес в своем ЕЕПРОМ). Устройство принимает этот адрес и запоминает его также в ЕЕПРОМ и далее откликается только на него. Способ не идеальный но на практике используется.