|
проблема с ATmega16, помогите новичку |
|
|
|
Aug 6 2006, 08:22
|
Частый гость
 
Группа: Свой
Сообщений: 83
Регистрация: 25-11-05
Из: odessa
Пользователь №: 11 397

|
люди, я щас буду головой об стенку биться  всю ночь мучаюсь а ничего не работает, как в принципе уже и мозг под утро ситуация следующая есть кристалл АТмега16-16PI, распаяный на монтажке с питанием 5В. есть программатор СТК200, собраный один в один со схемой с сайта ПОНИпрога собственно понипрог версии 2,06f который даёт Тест ОК при проверке программатора теперь даже не знаю как описать собственно проблему... я хотел спаять управлялку стеклоочистителем для своей старенькой машины... пару кнопок, таймер... ничего сложного. думал, для начального освоения АВР пойдёт. ну, написал прогу на асме, залил, смотрю - не работает. исправил кой чаво - всё равно не работает. потом думаю, дай ка я начну с простого... и написал следующее: код в АВРстудии версии 4.12 билд 460: .include "m16def.inc" .def tmp = r16 .cseg .org 0 jmp reset reset: ldi tmp, 0b11111111 out DDRC, tmp main: ldi tmp, 0b00000001 nop_cicle: rol tmp out PORTC, tmp nop jmp nop_cicle ;---------------------------- вот такой вот код. просто как сиськи первого размера. ну думаю, щаз увижу имульс какой-то частоты. беру осциллограф, встаю на 0 пин порта С и о чудо! импульс! 1 пин - импульс.... а дальше - 2 пин - единица, 3 - единица, 4 и 5 - нули, 6 и 7 - показывают правильный импульс. получается, что в порту работают только два старших и два младших бита, а средние - показывают детскую неожиданность. думаю, может что с осциллографом? иду и смотрю на цифровом (кажись Тектроник за 7 косарей) - всё идентично с показаниями старого советского осциллографа. затем пишу другую программу: .include "m16def.inc" .def tmp = r16 .def tmp1 = r17 .cseg .org 0 jmp reset reset: main: ldi tmp, 0b11111111 out DDRB, tmp ; так же ставил ДДРЦ, ДДРА, ДДРД ldi tmp, 0b00000000 ldi tmp1, 0b00000001 nop_cicle: add tmp, tmp1 nop out PORTB, tmp nop jmp nop_cicle ;------------------------------------------------ ну и по идее что я должен увидеть? делитель частоты. осциллограф.... порт C - те же пины работают, те же не работают. другие порты - ВООБЩЕ нули. беру другую атмегу16..... ****, то же самое! сто раз проверяю схемотехнику монтажки - всё правильно (да и негде там ошибиться! ) может я где-то чего-то не дочитал о назначении портов? что может быть? кто-то знает?
--------------------
Вся жизнь - ништяк, все бабы - леди, а солнце - шар дающий свет
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 43)
|
Aug 6 2006, 09:05
|
Частый гость
 
Группа: Свой
Сообщений: 83
Регистрация: 25-11-05
Из: odessa
Пользователь №: 11 397

|
спасибо за совет, сейчас попробую
но это касательно порта С. а что по поводу других портов? почему с ними могут быть проблемы?
--------------------
Вся жизнь - ништяк, все бабы - леди, а солнце - шар дающий свет
|
|
|
|
|
Aug 6 2006, 09:49
|
Знающий
   
Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231

|
А стек после reset: кто инициализировать будет Код reset: ldi r16, high(RAMEND) out SPH, r16 ldi r16, low(RAMEND) out SPL, r16 А что б начать зайди хоть сюда (раз десять наверное сылку давал) http://www.gaw.ru/html.cgi/txt/app/micros/avr/index.htm там как по русски, так и по импортному, апликейшены от Atmel. Также если будешь использовать биты порта на котором сидит компаратор, не забудь отключить его, т.к. он по умолчанию тоже включён.
Сообщение отредактировал Rash - Aug 6 2006, 09:50
|
|
|
|
|
Aug 6 2006, 10:22
|
Частый гость
 
Группа: Свой
Сообщений: 83
Регистрация: 25-11-05
Из: odessa
Пользователь №: 11 397

|
а назачем, извиняюсь, в такой тестовой программке инитить стек? ессесно что его инит я делаю, но не здесь же =)
--------------------
Вся жизнь - ништяк, все бабы - леди, а солнце - шар дающий свет
|
|
|
|
|
Aug 6 2006, 10:57
|
Частый гость
 
Группа: Свой
Сообщений: 83
Регистрация: 25-11-05
Из: odessa
Пользователь №: 11 397

|
в данном случае мы не обращаемся же в память, всё только через регистры. а теперь собственно жалуюсь на новую проблему: ну по совету товарища Black Pahan, решил запрограммить фьюзы. включаю пони прог, читаю - всё пусто. (и флеш проца пуст). ставлю бит, пишу - писать... потом читаю снова фьюзы - ничего не изменилось. зато во флеше!!!!!! мама родная! весь влешь забить мусором! в частности, если я не ошибаюсь, он просто в ячейки памяти записал их номера! ирэйз, повторно - сейм шит. читаю доку, ничего такого особенного на эту тему не нахожу... сорри за два сообщения, но что-то я не могу редактировать предыдущее
--------------------
Вся жизнь - ништяк, все бабы - леди, а солнце - шар дающий свет
|
|
|
|
|
Aug 6 2006, 13:16
|
Частый гость
 
Группа: Свой
Сообщений: 83
Регистрация: 25-11-05
Из: odessa
Пользователь №: 11 397

|
нда, до этого за понипрогом не наблюдал ничего такого! но при этом после того, как я делаю ирэйз (не ресет) он возвращает пустой флеш! ща попробую другой пони прог чтоли кто-то вообще программировал же фьюзы на атмеге16? не я же первый! как и чем вы это делали? кста прочитал в даташите - в MCUCSR есть бит JTD - это типа дисэйбл ДЖТАГА... ставлю... ага, как бы ни так...
--------------------
Вся жизнь - ништяк, все бабы - леди, а солнце - шар дающий свет
|
|
|
|
|
Aug 6 2006, 14:12
|
Частый гость
 
Группа: Свой
Сообщений: 83
Регистрация: 25-11-05
Из: odessa
Пользователь №: 11 397

|
взял сейчас 90s4434 всё работает замечательно! и фьюзы программит, и флеш! и работает всё!! чё ж мне так не прёт с атмегой16?
--------------------
Вся жизнь - ништяк, все бабы - леди, а солнце - шар дающий свет
|
|
|
|
|
Aug 6 2006, 15:24
|
Частый гость
 
Группа: Свой
Сообщений: 83
Регистрация: 25-11-05
Из: odessa
Пользователь №: 11 397

|
дело в том, что у меня стк200 программатор, там предумотрен шинный преобразователь, а если я правильно помню, то в этом программаторе (унипрог) нужен коннект на пины тупо через резисторы
--------------------
Вся жизнь - ништяк, все бабы - леди, а солнце - шар дающий свет
|
|
|
|
|
Aug 6 2006, 18:10
|
Частый гость
 
Группа: Свой
Сообщений: 83
Регистрация: 25-11-05
Из: odessa
Пользователь №: 11 397

|
но факт остаётся фактом - после установки фьюза ДЖТАГА - чтение флеша даёт нумерацию ячеек памяти, после ирейза - чистый флеш. вы лучше скажите, когда жмёшь read фьюзов в свежекупленной атмеге какие должны быть отмечены галочкой в понипроге?
--------------------
Вся жизнь - ништяк, все бабы - леди, а солнце - шар дающий свет
|
|
|
|
|
Aug 6 2006, 19:10
|

Знающий
   
Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768

|
галочкой(0) должны быть: JTAGEN,SPIEN,BOOTSZ1,BOOTSZ0,SUT0,CKSEL1,CKSEL2,CKSEL3. А че,даташита нету?
--------------------
"Hello, word!" - 17 errors 56 warnings
|
|
|
|
|
Aug 6 2006, 19:16
|
Частый гость
 
Группа: Свой
Сообщений: 83
Регистрация: 25-11-05
Из: odessa
Пользователь №: 11 397

|
даташита есть! спросил потому, что у меня ни один фьюз не помечен (может чего не знаю как должно быть) ! => понипрог не читает фьюзы, но не читает только на эту атмегу! завтра ещё 2313 попробую прочесть...
--------------------
Вся жизнь - ништяк, все бабы - леди, а солнце - шар дающий свет
|
|
|
|
|
Aug 6 2006, 19:56
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Вообще мега16 пользуюсь более 2 лет,и проблема была только из за JTAG.Про остальные порты подобное первый раз слышу. Вот настройки меги16 - отключение JTAG и частота 8Мгц.
Эскизы прикрепленных изображений
|
|
|
|
|
Aug 6 2006, 20:26
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(SergSit @ Aug 6 2006, 20:58)  Ничего пони прог не путает для меги16. Программирую им мегу три месяца(в том числе и фьэы). Все нормально. Хотя я и не пользуюсь ponyprog'ом вообще. Но ситуация описанная автором поста напрямую свидетельствует о том, что были прошиты LOCK's в режиме LB MODE3. Цитата И еще , насколько знаю, если установить защиту от прогрммирования по ISP то снять ее можно только паралельным программатором. Неправильно знаете.. LOCKS снимаются командой стирания (ChipErase). Ваш ответ из разряда, "слышал звон да непонял откуда он" ;> Здесь речь не идет о запрете ISP соответвующим fuse'ом SPIEN, т.к. запретить этот fuse по ISP вообще-то не представляется возможным. LOCK's по ISP программировать можно, и нужно если речь идет о коммерческом изделии. Но очевидно у ponyprog'a, который можно отнести только к разряду любительских программаторов, имеются проблемы с программированием или отображение FUSES/LOCKs. Это факт. Я бы, конечно, посоветовал автору вместо того чтобы лочить JTAG интерфейс - наоборот приобрести JTAGICE и ощутить все прелести внутрисхемной отладки. Из программаторов посоветовал бы приобрести AVRISP по критериям - скорость программирования и качество поддержи. Однако если он не собирается вплотную работать с AVR, тогда вероятно бесплатный AVReal через STK200/byteblaster будет самым лучшим выбором, т.к. достаточно надежен и судя по постам автора AVReal - на порядок более быстр по сравнению с другими LPT программаторами.
Сообщение отредактировал defunct - Aug 6 2006, 20:28
|
|
|
|
|
Aug 8 2006, 17:59
|
Частый гость
 
Группа: Свой
Сообщений: 83
Регистрация: 25-11-05
Из: odessa
Пользователь №: 11 397

|
спасибо всем за советы и отзывы, но, кажется проблема решилась "потусторонними силами"... пришёл я на работу, отобрал у людей рабочий прогграмматор, которым они кодили разные "классики". принёс домой, попробовал - аналогичная ситуация. (нумерация во флеше и нет фьюзов). принёс оба программатора на работу, подключил свой - тестится пони прогом, но не видит !никаких! кристаллов. включил рабчий программатор - теститься, видит кристалл, и атмегу 16 и её фьюзы! чудо! программлю JTAGEN, прекрасно! думаю, ну, дело в моём программаторе. приношу всё домой, подключаю свой программатор к своему компу.. и тихо афигеваю. видится атмега 16, её флеш, её фьюзы, всё пишется и читается, в т.ч. и если повторно зашить и отшить JTAGEN. потом правда долго догонял, почему у меня не работает порт А... но догнал =) что могло послужить причиной аномальной работы на моём компе двух программаторов, а после того как я их повозил по городу - к работе обоих? (кста у меня комп не перезагружался между подключениями!) но что больше меня волнует, почему мой программатор работает у меня дома, но не работает на рабочем компе?
--------------------
Вся жизнь - ништяк, все бабы - леди, а солнце - шар дающий свет
|
|
|
|
|
Aug 8 2006, 19:47
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
У меня была подобная загадка природы из за блока питания. Еще была проблема ,прикупил два программатора под ПОНИ и КОМ- один простенький JDM, другой навороченый от КиевСат (карточки под спутник,карточки SIM,мобилы,Pfoenix,PIC,AVR ,ну и разнокалиберная память само собой),так вот на стационарном компе оба работали, на буке только КиевСат.Проблема оказалась в напряжении уровней КОМ порта,в буке было +\- 5в заместь +\-12в.
|
|
|
|
|
Sep 6 2006, 18:28
|
Частый гость
 
Группа: Свой
Сообщений: 83
Регистрация: 25-11-05
Из: odessa
Пользователь №: 11 397

|
снова обращаюсь за помощью к знающим форума сего =)))
не очень уверен куда мне писать - в подраздел ИАР или в общий форум по АВР... поэтому напишу в эту тему =)
итак, суть задачи, которую реализовываю:
необходимо сделать генератор импульсов с разной (регулируемой независимо) длительностью единицы и нуля + по переключению испольнять пару строк кода.
что используется: вся та же атмега16, в качестве среды программирования - ИАР, среда отладки - АВР студия.
идея реализации: после неудавщихся экспериментов с режимом СТС таймера_1 решил делать через прерывание по переполнению того же таймера_1, поскольку длительность удержания 1 и 0 довольно большая и измеряется в десятках секунд.
итак, в режиме СТС идея не работала. думал, что что-то неправильно работает именно из-за режима. стал экспериментировать с прерыванием по переполнению (куда уж проще?). код обработчика кнопки вкл/выкл:
if (on = ~on) { PORTC = 0xff; setbit(TIMSK, TOIE1); setbit(TCCR1B, CS11); setbit(TCCR1B, CS10);
TCNT1L = imp_L; TCNT1H = imp_H; } else { clrbit(TIMSK, TOIE1); TCCR1A = 0; TCCR1B = 0; TCNT1 = 0; OCR1A = 0; OCR1B = 0; ICR1 = 0; PORTC = 0x00; }
примечание: clrbit и ей подобные функции работают корректно - это 200%.
код обработчика прерывания переполнения таймера: #pragma vector = TIMER1_OVF_vect __interrupt void impulse_change(void) { if (PORTC == 0x00) { TCNT1L = imp_L; TCNT1H = imp_H; } else { TCNT1L = pause_L; TCNT1H = pause_H; } PORTC = ~PINC; }
комментарии по поводу кода и как он по идее должен работать (и работает в симуляторе!!!): простейший кусок кода, который при включении устройства должен выдать 1 на выходе (порт С в данном случае), далее по вхождению в прерывание этот сигнал постоянно инвертировать. прикол в том, что он должен предустанавливать (определёнными заранее и, возможно, динамически меняющимися значениями), как в инициализации таймера (длительность первой единицы), так и в прерывании, регистр TCNT1 для получения необходимых длительностей сигналов.
теперь, как это всё работает в реальной жизни: а работает почти правильно, за исключением одного смертельного дя меня глюка: после инициализации таймера и его запуске, первый цикл счёта от 0000 до ФФФФ он деалет абсолютно не обращая внимания на предустановки TCNT1. соответственно, первый импульс длится слишком дохрена, а после вхождения первый раз в прерывание - всё устаканивается и предустановки берутся в расчёт, схема начинает работать правильно.
что уже предпринималось (и не привело к изменениям): не ресетя контроллер, выключаю генерирование, включаю его снова - та же картина. менял порт вывода менял места первой инициализации регистра TCNT1 делаю тотальное обнуление регистров таймера при запуске процессора менял структуру проги менял делители частоты
делал финт ушами: ставил сначала прямую подачу частоты на счётчик, а по первому вхождению в прерывание - добавлял ещё один CS, деля тем самым частоту счёта. всё равно один раз он после этого просчитывает до ФФФФ.
и самое странное, что меня настораживает и заставляет задуматься: сразу после инициализации таймера и установки значений выставляю вручную флаг прерывания по переполнению - !и всё равно! проц ведёт себя абсолютно точно так же - первый импульс ооооочень длинный! он не входит в прерывание пока не досчитает до FFFF от 0000!
неделю бъюсь головой о стенку и понимаю что ошибся где-то в мелочи, помогите увидеть, где!
--------------------
Вся жизнь - ништяк, все бабы - леди, а солнце - шар дающий свет
|
|
|
|
|
Sep 6 2006, 19:41
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(junoSynthesizer @ Sep 6 2006, 22:28)  setbit(TCCR1B, CS11); setbit(TCCR1B, CS10); Вот так нельзя CSx нужно устанавливать одной командой. Цитата(junoSynthesizer @ Sep 6 2006, 22:28)  if (on = ~on) { PORTC = 0xff; setbit(TIMSK, TOIE1); setbit(TCCR1B, CS11); setbit(TCCR1B, CS10);
TCNT1L = imp_L; TCNT1H = imp_H; } else { clrbit(TIMSK, TOIE1); TCCR1A = 0; TCCR1B = 0; TCNT1 = 0; OCR1A = 0; OCR1B = 0; ICR1 = 0; PORTC = 0x00; } У Вас сильно попутана последовательность программирования регистров таймера. Сначала программируем TCNT1,OCR1A,OCR1B,TCCR1A и т.д., затем запускаем таймер TCCR1B=(1<<CS11)|(1<<CS10).
|
|
|
|
|
Sep 8 2006, 14:31
|
Частый гость
 
Группа: Свой
Сообщений: 83
Регистрация: 25-11-05
Из: odessa
Пользователь №: 11 397

|
позволю доложить, что эти советы к положительным результатам не привели
по поводу выставления CSx одной командой, позволю высказать 2 возражения. если уж одной командой - то TCCR1B |= (1 << CS11) | (1 << CS10); а не TCCR1B = (1 << CS11) | (1 << CS10); чтобы оставить целыми все остальные разряды. поправьте меня если я ошибаюсь.
имхо, эти биты можно выставлять и последовательно. ведь по сути, счётчик запускается, и успевая (или не успевая) сделать пару тиков переходит к более длительному интервалу инкремента, что при моей точности "+/- километр" не принципиально.
что же качсается обнуления таймера, то имхо нет особой важности в последовательности. а вот при инициализации - есть, и я инитил регистры так, как было описано в предыдущем посте... результат прежний.
ещё версии? кто-то сталкивался с таким?
Сообщение отредактировал junoSynthesizer - Sep 8 2006, 14:32
--------------------
Вся жизнь - ништяк, все бабы - леди, а солнце - шар дающий свет
|
|
|
|
|
Sep 8 2006, 16:54
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(junoSynthesizer @ Sep 6 2006, 21:28)  if (on = ~on) { PORTC = 0xff; setbit(TIMSK, TOIE1); setbit(TCCR1B, CS11); setbit(TCCR1B, CS10);
TCNT1L = imp_L; TCNT1H = imp_H; } else { clrbit(TIMSK, TOIE1); TCCR1A = 0; TCCR1B = 0; TCNT1 = 0; OCR1A = 0; OCR1B = 0; ICR1 = 0; PORTC = 0x00; }
примечание: clrbit и ей подобные функции работают корректно - это 200%.
код обработчика прерывания переполнения таймера: #pragma vector = TIMER1_OVF_vect __interrupt void impulse_change(void) { if (PORTC == 0x00) { TCNT1L = imp_L; TCNT1H = imp_H; } else { TCNT1L = pause_L; TCNT1H = pause_H; } PORTC = ~PINC; }
комментарии по поводу кода и как он по идее должен работать (и работает в симуляторе!!!): простейший кусок кода, который при включении устройства должен выдать 1 на выходе (порт С в данном случае), далее по вхождению в прерывание этот сигнал постоянно инвертировать. прикол в том, что он должен предустанавливать (определёнными заранее и, возможно, динамически меняющимися значениями), как в инициализации таймера (длительность первой единицы), так и в прерывании, регистр TCNT1 для получения необходимых длительностей сигналов.
теперь, как это всё работает в реальной жизни: а работает почти правильно, за исключением одного смертельного дя меня глюка: после инициализации таймера и его запуске, первый цикл счёта от 0000 до ФФФФ он деалет абсолютно не обращая внимания на предустановки TCNT1. соответственно, первый импульс длится слишком дохрена, а после вхождения первый раз в прерывание - всё устаканивается и предустановки берутся в расчёт, схема начинает работать правильно.
что уже предпринималось (и не привело к изменениям): не ресетя контроллер, выключаю генерирование, включаю его снова - та же картина. менял порт вывода менял места первой инициализации регистра TCNT1 делаю тотальное обнуление регистров таймера при запуске процессора менял структуру проги менял делители частоты
делал финт ушами: ставил сначала прямую подачу частоты на счётчик, а по первому вхождению в прерывание - добавлял ещё один CS, деля тем самым частоту счёта. всё равно один раз он после этого просчитывает до ФФФФ.
и самое странное, что меня настораживает и заставляет задуматься: сразу после инициализации таймера и установки значений выставляю вручную флаг прерывания по переполнению - !и всё равно! проц ведёт себя абсолютно точно так же - первый импульс ооооочень длинный! он не входит в прерывание пока не досчитает до FFFF от 0000!
неделю бъюсь головой о стенку и понимаю что ошибся где-то в мелочи, помогите увидеть, где! Что означает Выражение Код if (on = ~on) ........ Вы переменную on каким значением инициализируете, если инициализируете вообще? И потом, такая конструкция не очень надежна. Если хотя бы один бит будет ненулевым, то данное условие будет выполняться всегда. Для подобных целей лучше использовать один бит. Это повысит надежность Вашей программы.
|
|
|
|
|
Sep 8 2006, 18:27
|
Частый гость
 
Группа: Свой
Сообщений: 83
Регистрация: 25-11-05
Из: odessa
Пользователь №: 11 397

|
2 _Bill
не там копаете. это тупо переменная она или 0xFF или 0x00 (инитится нулём), соответственно её инвертируем и получаем переключение состояний. это работает стопудов, не здесь глюк
2 singlskv
тоже не то. порт С - выходной. соответсвенно... пин С я в конце функции использую чисто для читабельности и компактности кода.
--------------------
Вся жизнь - ништяк, все бабы - леди, а солнце - шар дающий свет
|
|
|
|
|
Sep 8 2006, 19:08
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(junoSynthesizer @ Sep 8 2006, 22:27)  2 singlskv
тоже не то. порт С - выходной. соответсвенно... пин С я в конце функции использую чисто для читабельности и компактности кода. А Вы попробуйте таки поменять PORTC на PINC. Если следовать datasheets: Код Reading the Pin Value Independent of the setting of Data Direction bit DDxn, the port pin can be read through the PINxn Register bit. As shown in Figure 22, the PINxn Register bit and the preceding latch constitute a synchronizer. This is needed to avoid metastability if the physical pin changes value near the edge of the internal clock, but it also introduces a delay. Figure 23 shows a timing diagram of the synchronization when reading an externally applied pin value. The maximum and minimum propagation delays are denoted tpd,max and tpd,min respectively. Figure 23. Synchronization when Reading an Externally Applied Pin value ............................... Figure 24. Synchronization when Reading a Software Assigned Pin Value ............................... при этом в симуляторе может все работать
|
|
|
|
|
Sep 8 2006, 20:50
|
Частый гость
 
Группа: Свой
Сообщений: 79
Регистрация: 13-01-06
Из: Москва
Пользователь №: 13 133

|
Если не ошибаюсь, то когда выполняется чтение portD то чтение происходит из управляющего выходом регистра, при чтении pinD читается состояние физической линии, прошедшее синхронизацию, следовательно при исправной цепи и достаточном времени, работать должно идентично с обоими командами. Я бы всетаки использовал одинаковые обращения. Предпринял бы следующее:
*Проверил бы ассемблерный код, во "что" он там скомпилировал. *Проверил бы последовательность инициализации таймера. *Попробовал бы код на другом кристалле (лучше менее навороченном)
Получается, что таймер стартует с параметрами
Кажись нашел ваш трабл сначала надо грузить старшую часть потом младшую , а не на обарот об этом в даташит сказано !!!, думал вы знаете
|
|
|
|
|
Sep 8 2006, 21:04
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Gennadiy_ @ Sep 9 2006, 00:50)  Если не ошибаюсь, то когда выполняется чтение portD то чтение происходит из управляющего выходом регистра, при чтении pinD читается состояние физической линии, прошедшее синхронизацию, следовательно при исправной цепи и достаточном времени, работать должно идентично с обоими командами. Я бы всетаки использовал одинаковые обращения. в даташите для чтения пинов даже при програмной установке ВСЕГДА используется PINx (почему-то). Результат чтения из PORTx вообще не описан... Если мне не изменяет память, на эти грабли я уже наступал При этом в симуляторе все ОК. Как работает чтение из PORTx для меня так и осталось загадкой (может быть задать этот вопрос atmel  ).
|
|
|
|
|
Sep 8 2006, 21:22
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Gennadiy_ @ Sep 9 2006, 01:10)  Мне почемуто помнится, что гдето я видел описание этой разницы, или ктото мне рассказывал это. Вероятно вот здесь: В.В.Сташин А.В.Урусов О.Ф.Мологонцева "Проектирование цифровых устройств на однокристальных микроконтроллерах" Только на AVR все чуть-чуть подругому.
|
|
|
|
|
Sep 8 2006, 23:31
|
Местный
  
Группа: Новичок
Сообщений: 232
Регистрация: 24-06-06
Пользователь №: 18 332

|
Для AVR я вам советую 2 инструмена объемом 6 Мб всего! достаточных для полного цикла разработки - программирования, отладки и прошивания - вот посмотрите: vm-lab.narod.ru Мастер начального кода позволяет настраивать МК так как вам нужно интерактивно и симулятор великолепный. Еще скачайте PROTEUS - уверен вам понравится. Цитата(singlskv @ Sep 9 2006, 01:04)  для чтения пинов даже при програмной установке ВСЕГДА используется PINx (почему-то). Результат чтения из PORTx вообще не описан... так устроен AVR - вот подробно: [banned]/02.htm
|
|
|
|
|
Sep 9 2006, 10:05
|
Частый гость
 
Группа: Свой
Сообщений: 83
Регистрация: 25-11-05
Из: odessa
Пользователь №: 11 397

|
2 Gennadiy_
спасибо вам огромное! я действительно как то не обратил внимание на то что сначала надо инициализировать верхнюю часть 16 разрядного регистра счёта!
всё заработало!
--------------------
Вся жизнь - ништяк, все бабы - леди, а солнце - шар дающий свет
|
|
|
|
|
Sep 9 2006, 10:42
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Gennadiy_ @ Sep 9 2006, 13:30)  Не смог загрузить картинки. В D.Sheet старой серии МС было так
The Port B Input Pins address (PINB) is not a register, and this address enables access to the physical value on each Port B pin. When reading PORTB, the Port B Data Latch is read, and when reading PINB, the logical values present on the pins are read.
Если посмотреть на схему организации выхода, то можно заметить _однонаправленные_ ключи, в новых схемах добавились цепи синхронизации и доп. цепи управления выходом для новых режимов. Согласно схемам при чтении portD выдается сигнал RRx и данные считываются с выхода тригерра управления, физическая линия может при этом иметь другое состояние.
Где здесь и что " подругому" ? Да Вы правы, просто в новых DSheet этой фразы нет "When reading PORTB, the Port B Data Latch is read", а на схему я и не смотрел. А глюк у меня был кажеться связан с этим: ", физическая линия может при этом иметь другое состояние"
|
|
|
|
|
Sep 9 2006, 19:36
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
Код char user[10]; user="Shurmas"; if (user == a.vr123.nm.ru) then { ban(user); } правильная конструкция?
|
|
|
|
|
Sep 9 2006, 20:28
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(ps1x @ Sep 9 2006, 23:36)  Код char user[10]; user="Shurmas"; if (user == a.vr123.nm.ru) then { ban(user); } правильная конструкция? C Shurmas то все и так ясно, интересно вот это: smk"AVR-технология. Серьезные вопросы., Очень грамотный и думающий человек осваивает AVR." и первой фразой: "Читал форум и "курс", понятно какой... курс скорее мешает думать, чем помогает...." smk != Shurmas ??? P.S это был первый пост smk на electronix ?! P.S.2. Цитата(ps1x @ Sep 9 2006, 23:36)  Код char user[10]; <--------- Я бы зарезервировал побольше места :) user="Shurmas"; --------- иначе со временем придется менять ... if (user == a.vr123.nm.ru) then { ban(user); }
|
|
|
|
|
Sep 10 2006, 09:27
|
Частый гость
 
Группа: Свой
Сообщений: 83
Регистрация: 25-11-05
Из: odessa
Пользователь №: 11 397

|
Народ, харе флудить =) я вот тоже читаю форум уже довольно давно, и этот "курс" у меня в печёнках сидит, человек его рекламирует похлеще чем владелец порно-сайта =) ну что поделать =)
проблема, ввиду которой был снова поднят пост - решена, поэтому говорю всем кто посмотрел - спасибо =)
--------------------
Вся жизнь - ништяк, все бабы - леди, а солнце - шар дающий свет
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|