Технический форум по робототехнике.
Ринатик » 24 июл 2008, 07:34
Спасибо Вам всем, не уходите далеко, у меня еще вопросы будут.
Ринатик » 25 июл 2008, 14:46
О задаче z3, про 12-битный таймер. При симуляции в VMLAB, если при запуске нажать KC в Control Panel (сбросить в "0" вывод PB2), программа зацикливается в месте, где идет проверка исправности нагрузки:
- Код: Выделить всё • Развернуть
if (PINB.2 == 0)
{ /* Если на PB2 лог. "0" - нагрузка неисправна или не подключена */
while (1)
{
// будем быстро мигать (период 0.3 сек) до устранения неисправности и нового включения питания таймера
delay_ms(150); // пауза 150 мС
PORTB.0 = 1; // вЫкл светодиод
delay_ms(150); // пауза 150 мС
PORTB.0 = 0; // вкл светодиод
}; // это закрыв. скобка для while
} // это закрыв. скобка для if
и дальше, если нажать еще раз KC в Control Panel (т.е. сделать "1" на PB2), программа из этого цикла уже не выходит. Но если вместо while (1) вставить while (!PINB.2), то программа при установке "1" на PB2 выходит из этого цикла и продолжает нормальную работу.
Сергей » 25 июл 2008, 15:10
правильно, потомучто стоит while( 1 ) то есть while( true ) то есть бесконечный цикл, и если в нем нету break то он реально бесконечный
avr123.nm.ru » 25 июл 2008, 22:21
В комментариях (в куске исходника выше) ведь написано - это сделано специально, чтобы программа могла запустится тлько при новом включении таймера.
Ринатик » 28 июл 2008, 10:07
Наверное я невнимательно прочитал. А вот я могу обнулить 7 и 6 биты в числе таким образом:
R10.6=0; R10.7=0; ?
avr123.nm.ru » 28 июл 2008, 15:47
Ринатик писал(а):Наверное я невнимательно прочитал. А вот я могу обнулить 7 и 6 биты в числе таким образом:
R10.6=0; R10.7=0; ?
Учиться лучше с начала - ИМХО.
Ринатик » 29 июл 2008, 12:27
Учиться лучше с начала - ИМХО.
Ответ не понятен, изучаю с самого начала. Вопрос был в задаче "Как ещё можно обнулить биты 7 и 6?". Это из задачи z3 про таймер. Вот я и думаю, у регистров 10 и 11 адреса согласно Figure8. Data Memory Map $0010 и $0011. В пятом уроке указано:
К битам регистров с адресами от 0 до 31 в компиляторе CodeVisionAVR можно обратится (и читать и записывать) проще.
Вот так: REGISTR.BIT
Т.е. я могу обнулить так, как писал выше?
blindman » 29 июл 2008, 12:31
Ты хочешь изменять биты в регистрах процессора из программы на C?
Ринатик » 29 июл 2008, 13:19
Сдается мне, что я ошибаюсь. Т.е. имелись ввиду (если смотреть REGISTER SUMMARY на ATMega8) регистры TWBR, TWSR,..., SFIOR, OSCCAL ?
loid » 31 июл 2008, 11:59
Народ дело вот у меня какое, опять проблема. Раскажу всё что было. Занимался я чипом по имени ATMEGA16, всё было замечательно, до определённого момента пока он не стал определяться в CodeVisionAVR. Ну думаю, готов чип, новый покупать надо. Купил... Занимаюсь дальше, опять проблемка такая же. Вот только что прошивался а сейчас опять не видит его программатор. Думаю дело всё во фьюзах. Видимо при прошивке (не знаю каким образом) отключился JTAG. Что можно с этим сделать?
EdGull » 31 июл 2008, 12:24
т.е. ты его через JTAG шьешь, а не черех ISP?
loid » 31 июл 2008, 12:28
Если не ошибаюсь - шью через JTAG. Другими словами подключаю чип ATMEGA16 к порту B, через пять проводков.
EdGull » 31 июл 2008, 12:49
каким программатором?
loid » 31 июл 2008, 13:03
Прошиваю программой CodeVisionAVR через "пять проводков" подключенных к LPT
EdGull » 31 июл 2008, 13:06
тогда ты шьешь через ISP
JTAG тут ваще никаким боком не причем