Ассемблер (ASM) для AVR в вопросах и ответах
Может вам обратить внимание на ООП? В целях самообразования, так сказать...
- Реклама
"черный ящик" и к ООП применим, только пока необходимости не было использовать ООП применительно к микроконтроллерным программам.
Я же сказал - для самообразования.
А принцип разделения ассемблерной программы на отдельные логические блоки ("чёрные ящики"), а так же их независимая отладка применяется повсеместно.
А принцип разделения ассемблерной программы на отдельные логические блоки ("чёрные ящики"), а так же их независимая отладка применяется повсеместно.
Я, конечно, дико извиняюсь, просто мимо проходил, но любопытно стало глянуть на все эти инкапсуляции, полиморфизмы и наследования, если у тебя ОЗУ всего 512 байт. Хотя конечно, чего не сделаешь крутизы ради : можно и камень взять под ту же задачу раз в 8 дороже.ploop писал(а):Может вам обратить внимание на ООП? В целях самообразования, так сказать...
Я так думаю.
Вот блин, началась!
Кто говорил про ООП применительно к контроллерам? Я говорил - в целях самообразования. То есть, чтобы человек понял, что всё "большое" программирование есть работа с "чёрными ящиками", собирание чего-то из готового конструктора "лего". И по другому нельзя!
Кто говорил про ООП применительно к контроллерам? Я говорил - в целях самообразования. То есть, чтобы человек понял, что всё "большое" программирование есть работа с "чёрными ящиками", собирание чего-то из готового конструктора "лего". И по другому нельзя!
- Реклама
Так вот в чем суть-то... начинающему надо понять что такое черный ящик, и почему он собственно черный. Самое трудное это вначале научится забывать все что не касается главного.
А ведь посмотрите с чего начинается любой курс обучения? Правильно ... с деталей, с частностей. Поэтому и не выходит освоить все быстро, качественно и с наскока.
Мне кажется, начинать-то надо с Главного, научится отделять мух от котлет а потом уже переходить к практике.
Но нет же, люди упорно начинают с "помигать светодиодом" и закономерно для них становится "как тут все сложно".
А ведь посмотрите с чего начинается любой курс обучения? Правильно ... с деталей, с частностей. Поэтому и не выходит освоить все быстро, качественно и с наскока.
Мне кажется, начинать-то надо с Главного, научится отделять мух от котлет а потом уже переходить к практике.
Но нет же, люди упорно начинают с "помигать светодиодом" и закономерно для них становится "как тут все сложно".
Всё правильно. Эти частности кто должен делать? Сам обучаемый. А потом уже уметь абстрагироваться от них.А ведь посмотрите с чего начинается любой курс обучения? Правильно ... с деталей, с частностей. Поэтому и не выходит освоить все быстро, качественно и с наскока.
Всем привета.
Такой вопрос: собираю одну схемку attiny2313a, которая должна дружить с компьютером через ком-порт (иже rs-232). Для развязки стоит MAX232. Наметал код в AVR Studio4, прогнал - все вроде работает. Залил в атиньку - не работает. На компьютере прием сигнала из тиньки смотрю через Terminal v1.9b. Для начала пытаюсь послать в комп простой код, например 0xAA, но ничего не идет
Что характерно, замыкаю Rx на Tx со стороны схему после преобразования Макса (в TTL уровнях) - петля с компа назад не возвращается, отключаю Тиньку от входов Макса и замыкаю - петля работает, подключаю - опять перестает.
Когда нажимаю ресет - тинька на время "просаживает" свои ноги в 0 - в этот момент в комп попадает "0" (на этапе инициализации порта).
Выставлял в терминале разные скоростя и т.д. - подозреваю что неправильно инициализирован порт, пытался менять - не помогает.
Понимаю, что где-то туплю, но сам не вижу...
Такой вопрос: собираю одну схемку attiny2313a, которая должна дружить с компьютером через ком-порт (иже rs-232). Для развязки стоит MAX232. Наметал код в AVR Studio4, прогнал - все вроде работает. Залил в атиньку - не работает. На компьютере прием сигнала из тиньки смотрю через Terminal v1.9b. Для начала пытаюсь послать в комп простой код, например 0xAA, но ничего не идет
Код: Выделить всё
...
.equ PORTINOUT = PORTD
.equ DDRINOUT = DDRD
.equ PININOUT = PIND
...
.CSEG
ldi temp,(1<<PORTD5)|(1<<PORTD6)|(1<<0)|(1<<1) //(1<<PORTD5)|(1<<PORTD6) - два входа; |(1<<0)|(1<<1) - добавлено позже при переборе вариантов
out PININOUT,temp
out PORTINOUT,temp ;Включаем подтягивающие резисторы на входах TermoPort+KeyInPort
com temp
out DDRINOUT, temp ;Инициализация порта TermoPort+KeyInPort на вывод
nop
;Инициализация USART : Set baud rate 38.4k 8B 1Sb parity 0 - UDRIE - выключен
ser temp
ldi temp0,0x12
out UBRRH, temp
out UBRRL, temp0
ldi temp, (1<<RXEN)|(1<<TXEN) ; Enable receiver and transmitter
out UCSRB,temp
ldi temp, (0<<USBS)|(3<<UCSZ0)|(0<<UPM0) ; Set frame format: stop bit=1; data =8bit; parity=0
out UCSRC,temp
ldi temp,0xAA
out UDR,temp
...
Когда нажимаю ресет - тинька на время "просаживает" свои ноги в 0 - в этот момент в комп попадает "0" (на этапе инициализации порта).
Выставлял в терминале разные скоростя и т.д. - подозреваю что неправильно инициализирован порт, пытался менять - не помогает.
Понимаю, что где-то туплю, но сам не вижу...
мысли мысли штош вы вйотесь
над мойейу головойу
вы там мосга нинайдете
нед там мосга! йа тупойе (БОР)
над мойейу головойу
вы там мосга нинайдете
нед там мосга! йа тупойе (БОР)
лично я наступал на самые тупые грабли несколько раз: перепутывал номера контактов разъема порта 2 и 3 - один из них помечен RX, другой - TX. неединожды соединял выход TX контроллера с не тем контактом... вдруг и у вас та же песня? (в код не смотрел)
битва с дураками проиграна, победители торжествуют. слава победителям!
Скорее всего так и есть.подозреваю что неправильно инициализирован порт
Вот пример инициализации UART на 2313 (рабочий)
Код: Выделить всё
.equ xtal = 14318180 ; кварц
.equ baudrate = 9600 ; скорость UART
.equ bauddivider = xtal/(16*baudrate)-1
Код: Выделить всё
ldi R16, low(bauddivider)
out UBRRL,R16
ldi R16, high(bauddivider)
out UBRRH,R16
ldi R16,(1<<TXEN)|(1<<RXEN)|(1<<RXCIE) ; разрешаем только приём и прерывание по нему
out UCSRB,R16
ldi R16,(1<<UCSZ0)|(1<<UCSZ1)
out UCSRC,R16UCSRC = (1<<URSEL)|(3<<UCSZ0) ; Set frame format: 8data, 1stop bit
Выведи в контроллере, при проверке наличия данных на отдельные выводы состояние бит ошибок приема - посмотришь что не так.
Выведи в контроллере, при проверке наличия данных на отдельные выводы состояние бит ошибок приема - посмотришь что не так.
Прошу прощения за безпокойство, проблема оказалась не в коде.
Уже после того, как опубликовал пост, на всякий случай еще разок промыл плату (главное - уже наступал на эти грабли) - дело в том что корпус SOIC сразу не заметил, что-то попало между ножкой кварца и ТХ... результат думаю предсказуемый
после того как промыл - заработало... Всем пасиб за советы!!
Уже после того, как опубликовал пост, на всякий случай еще разок промыл плату (главное - уже наступал на эти грабли) - дело в том что корпус SOIC сразу не заметил, что-то попало между ножкой кварца и ТХ... результат думаю предсказуемый
мысли мысли штош вы вйотесь
над мойейу головойу
вы там мосга нинайдете
нед там мосга! йа тупойе (БОР)
над мойейу головойу
вы там мосга нинайдете
нед там мосга! йа тупойе (БОР)
Уважаемые гуру асесблера подскажите как просканировать такую клаву на 4 кнопки, ато с обучалкой совсем запутался.
- Вложения
-
- 123.jpg
- (88.81 КБ) 381 скачивание
Последний раз редактировалось nibiluk Вт мар 06, 2012 00:04:16, всего редактировалось 1 раз.
Всем известно что любая микросхема работает на дыме, и если волшебный дым из неё вышел то она перестает работать.
формат рисунка не то был, исправил.
- Вложения
-
- 123.jpg
- (88.81 КБ) 419 скачиваний
Всем известно что любая микросхема работает на дыме, и если волшебный дым из неё вышел то она перестает работать.
Какая-то странная схема. Вы уверены что она правильная? Почему R4 R5 R7 в воздухе висят?
Это входы, схема с протеуса, динамическую индикацию понял, а вот клаву никак.
Всем известно что любая микросхема работает на дыме, и если волшебный дым из неё вышел то она перестает работать.
Диоды надо н акнопки. и вход подпереть к "+" или "-" чтобы не висел в воздухе когда ни одна кнопка не нажата. Иначе что будет если нажать ДВЕ кнопки?
Почему сигнал на кнопки взят с индикатора а не с порта? когда нажмешь кнопку, а с дугой стороны будет резистор "подпирать" индикатор лишний раз засветишь... или если индикатор будет отключен и ток через кнопку не потечет хоть она и окажется нажатой?
Ага, не заметил сразу косяк... у тебя будут реагировать кнопки все кроме той которая подключена к зажженому сегменту. А должно быть наоборот, срабатывать должна только та кнопка индикатор которой зажжен. Сделай отвод кнопок с баз транзисторов(непосредственно с выводов порта) через диоды, и станет гораздо легче.
Почему сигнал на кнопки взят с индикатора а не с порта? когда нажмешь кнопку, а с дугой стороны будет резистор "подпирать" индикатор лишний раз засветишь... или если индикатор будет отключен и ток через кнопку не потечет хоть она и окажется нажатой?
Ага, не заметил сразу косяк... у тебя будут реагировать кнопки все кроме той которая подключена к зажженому сегменту. А должно быть наоборот, срабатывать должна только та кнопка индикатор которой зажжен. Сделай отвод кнопок с баз транзисторов(непосредственно с выводов порта) через диоды, и станет гораздо легче.
ну.... как то так надо бы... где ограничение по току на индикацию? почему транзисторы не той структуры? как вы представляли их работу? вообщем в картинке все написано
а... еще резисторы на бызы транзисторов
а... еще резисторы на бызы транзисторов
- Вложения
-
- 123.rar
- (86.38 КБ) 150 скачиваний
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
В протеусе можно и без ограничительных резисторов, в нем дым никак пойти не сможет!


