Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Глюки PIC. Кто хочет посмеяться?


Автор: rcdimon 4.1.2005, 15:30
Не один Micro$oft богат глюками! У Microchip (у них даже в названии что то общее есть smile)

Это конечно смешно, но не для меня. Я делаю частотомер. Проверяю не работает. Проверяю выходы пика осциллографом и что я вижу! А что я выижу, можете посмотреть тут, я специально выложил http://www.artem131.narod.ru/doc1.htm (грузится долго, так что подожлите минуты 2-3)

И скажите В ЧЕМ ДЕЛО? Мне это совсем не нравится! У меня работа стоит! smile

ЧТо это за сигналы? Пик просто физически не может их давать! Они амлитудой вольт в 6, а питание только 5! и они Аналоговые! Но как?

Автор: Guest 4.1.2005, 19:13
Сайт твой не могу посмотреть, пришли картинки на [email protected]
На народ.ру хостинг плохой.
Смотрел ли пульсации питания? Пробовал ли другой кристалл?
Кварц заводится на нужной для него частоте? Попробуй тест со светодиодом с частотой 0,5 Гц - он моргает нормально? Какие в этом случае импульсы? Без схемки трудно что либо сказать, я понимаю что это коммерческая тайна, но не перегружены ли порты?

Автор: Гость_Alex 4.1.2005, 21:15
Питание отличное, блок питание от компа. Но что меня больше всего убивает - иногда прога работает нормально, иногда неправильно, иногда вообще не работает, а иногда вообще генерации нет! Может быть я что нибудь у него не инициализирую?

Автор: cardinal 4.1.2005, 21:21
А кристалл какой? Это может быть очень важно!
Цитата
Но что меня больше всего убивает - иногда прога работает нормально, иногда неправильно, иногда вообще не работает, а иногда вообще генерации нет!

Где-нибудь не контачит?

Автор: Guest 4.1.2005, 21:54
Кристалл PIC16F74-I/P. Качество пайки проверял - все нормально. В этом пике есть АЦП, так вот про него сказано, что по умолчанию его выводы инициализированы как аналоговые.
Код

movlw     .255
movwf     adcon1

Этими командами я ставлю все выводы как цифровые.

Автор: cardinal 4.1.2005, 22:12
А что с кварцем?

Автор: Гость_Alex 4.1.2005, 22:42
Кварц на 5 МГц, прошивал IC-PROG и там выставлял тип кварца как HS. Варианты - XT, LP, HS и RC. Как я понял LP -низкочастотный, XT - средне и HS высокочастотный. Завтра попробую взять другой пик - может брак

Автор: cardinal 4.1.2005, 23:19
Осцилографом посмотри какая у тебя частота, но думаю с 5Мгц проблем быть не должно...

Автор: Гость_jimmi 5.1.2005, 10:04
Инициализацию портов делаю так


; ОЧИСТИМ ПОРТЫ ВВОДА ВЫВОДА
BANKSEL PORTA
CLRF PORTA
CLRF PORTB
CLRF PORTC


; НАСТРОИМ ПОРТЫ ВВОДА ВЫВОДА
BANKSEL TRISC
; ПОРТ С
BCF TRISC,0 ; ПОРТ С ВЕСЬ НА ВЫВОД.
BCF TRISC,1
BCF TRISC,2
BCF TRISC,3
BCF TRISC,4
BCF TRISC,5
BCF TRISC,6
BCF TRISC,7

; ПОРТ А
; ПОРТ А ВЕСЬ НА ВВОД
BSF TRISA,0
BSF TRISA,1
BSF TRISA,2
BSF TRISA,3
BSF TRISA,4
BSF TRISA,5
BSF TRISA,6
BSF TRISA,7
; ПОРТ В
; ПОРТ В ВЕСЬ НА ВВОД
BSF TRISB,0
BSF TRISB,1
BSF TRISB,2
BSF TRISB,3
BSF TRISB,4
BSF TRISB,5
BSF TRISB,6
BSF TRISB,7
Засылка всего регистра за одну команду mov почему-то приводит к странным результатам (в отладчике).

Регистр adcon1 относится к АЦП, он порты не инициализирует.

Осциллятор наверное на 5 МГц нужно все-таки XT.
На сайте микрочипа есть методика подбора емкостей около кварца по минимальному току потребления кристалла для получения стабильной генерации.
Вообще у меня с ПИКом особых проблем не было - даташит на русском, комманд мало.

Автор: Alexei 5.1.2005, 10:43
Цитата
Питание отличное, блок питание от компа.

Такое питание может быть отличным только в худшую сторону: помех немерено!

Автор: rcdimon 5.1.2005, 11:20
Питание пробовали не только от компа, пробовали с двумя разными (импульсным и линейным).
Не мне эти пики очень нравятся! Это что за полиморфные ошибки? Всегда по разному работает! Подносишь палец на растояние ближе чем 4 См так он вообще такие фичи выдавал! Он что чуствителен к наводкам? И все же, что вы мне посоветуете делать? Может и правда на атмелы переходить? У них хоть асм нормальный. Все видели фотки? Фотки этих крассивых аналоговых сигналов? Я и не думаль, что в пике есть такие недокументированные возможности как ЦАП, и как это я с ним работаю, не зная про ниго ничего smile))))))) Круто! Люблю я пики! Что б их черти драли! smile smile

Автор: cardinal 5.1.2005, 15:19
Цитата(rcdimon @ 5.1.2005, 09:20)
Может и правда на атмелы переходить? У них хоть асм нормальный.

Ага... И компилятор сишный под них тоже есть. Называется sdcc, поищи в инете...

Автор: Guest 5.1.2005, 16:49
Вот выдержки форума по ПИКам
http://www.microchip.ru/phorum/read.php?f=2&i=41058&t=41058&phorum_uriauth=jimmi%3Ac2888045cc3a9dfafced6e26b7e4d2c5
http://www.microchip.ru/phorum/read.php?f=2&i=74879&t=74879&phorum_uriauth=jimmi%3Ac2888045cc3a9dfafced6e26b7e4d2c5
http://www.microchip.ru/phorum/read.php?f=2&i=75347&t=75347&phorum_uriauth=jimmi%3Ac2888045cc3a9dfafced6e26b7e4d2c5
http://www.microchip.ru/phorum/read.php?f=2&i=74702&t=74702&phorum_uriauth=jimmi%3Ac2888045cc3a9dfafced6e26b7e4d2c5
http://www.microchip.ru/phorum/read.php?f=2&i=74237&t=74237&phorum_uriauth=jimmi%3Ac2888045cc3a9dfafced6e26b7e4d2c5
http://www.microchip.ru/phorum/read.php?f=2&i=73884&t=73884&phorum_uriauth=jimmi%3Ac2888045cc3a9dfafced6e26b7e4d2c5
http://www.microchip.ru/phorum/read.php?f=2&i=70135&t=70135&phorum_uriauth=jimmi%3Ac2888045cc3a9dfafced6e26b7e4d2c5
http://www.microchip.ru/phorum/read.php?f=2&i=58713&t=58713&phorum_uriauth=jimmi%3Ac2888045cc3a9dfafced6e26b7e4d2c5
http://www.microchip.ru/phorum/read.php?f=2&i=69254&t=69254&phorum_uriauth=jimmi%3Ac2888045cc3a9dfafced6e26b7e4d2c5

Может найдешь решение своей проблемы

Автор: Alexei 6.1.2005, 09:47
Цитата(rcdimon @ 5.1.2005, 11:20)
Может и правда на атмелы переходить?

Попробуй Алгоритм Билдер для АВР - совсем напрягаться не надо!
А по конкретному вопросу: попробуй внешний тактовый генератор.

Автор: PILOT 7.1.2005, 23:14
ошибка 99.9999999999999999999999999% в программе.
скорее всего переход на команду выше чем размер программы... симптомы именно эти.
(может стек портится, может jmp куда-то не туда).
Я бы порекомендовал по шагам...

СУВ.

Автор: quarz 8.1.2005, 01:20
Может быть и стек, причем у 3 пиков одновременно..!

Автор: PILOT 8.1.2005, 15:26
а может за границы страницы вылез...
Я всегда относился к подобным глюкам с самокритикой, и в 99.999% виноват был именно я, либо моя невнимательность, либо незнание, но в любом случае - я.
Так что усердия вам в поиске программного бага.

СУВ.

Автор: quarz 10.1.2005, 22:31
Все верно, ошибка была именно в программе. Очень помог пример jimmi, мы инициализировали порты без BANKSEL. Кстати, что это значит? Насколько я помню у пиков такой команды нет. Сейчас прога заработала, но на это ушло 2 ночи. Сейчас будем разбиратся с протоколом передачи данных в комп через последовательный порт. И есть еще один вопрос: даже не знаю задавать его здесь или в новой теме.
Короче, для получения определенного интервала времени - 1 сек мы используем модуль 2-х байтный модуль TMR1 все в том же 74 пике. На С0-С1 повесили часовой кварц (32768Гц) и к таймеру прикрепили прерывание по переполнению. По логике, при частоте импульсов 2^15 Гц 16-разрядный таймер должен переполняться каждые 2 секунды. Но мало того, для получения интервала в 1 сек нам пришлось еще и предделитель к нему поставить 1:2 ! Только так получилось что он сбрасывается примерно каждую секунду. 'Примерно' - если сверять его с часами то он за минуту уходит на 10-15 секунд. Как такое может быть? Ведь часы с этим кварцев работали нормально. Или я считать в двоичной системе разучился. Но 2^15=32768, а именно столько кварц дает импульсов в 1 секунду и от такой частоты 15-разрядный счетчик должен переполняться. Но у нас 16-разрядный,-->он должен сбрасываться в 2 раза реже. Он жн сбрасывается в 2 раза чаще... Что касается программы, ни в один из байтов таймера мы ничего не записываем, только считываем. По переполнению переходим в подпрограмму обработки прерывания и там делаем все что нам нужно.

Автор: PILOT 11.1.2005, 00:53
А вы померить осциллографом частоту кварца можете? (через усилок например)
Может гармонику ловите 4х?

СУВ.

Автор: jimmi 11.1.2005, 10:54
Да, я тоже с такой ситуацией столкнулся, кварц генерит на своей частоте, посчитал константу для таймера, запустил устройство. Частота импульсов на выходе почти в два раза ниже. Просто подстроил по осциллографу константу таймера и все. Загадка какая-то.
Комманда BANKSEL переключает банки в ПИКе. Регистры лежат в разных банках, и могло такое быть, что ты писал в совершенно другой регистр. В отладчике это можно увидеть.

Автор: PILOT 11.1.2005, 22:31
а я как-то раз столкулся именно с гармониками (правда частоты повыше)... особенно часто это бывает на поделках, где не всегда получается все красиво соединить проводниками.

СУВ.

Автор: Kaskad 13.1.2005, 16:01
Цитата(quarz @ 10.1.2005, 22:31)
Насколько я помню у пиков такой команды нет.

Нету.
Цитата(quarz @ 10.1.2005, 22:31)
определенного интервала времени - 1 сек мы используем модуль 2-х байтный модуль TMR1 все в том же 74 пике. На С0-С1 повесили часовой кварц (32768Гц) и к таймеру прикрепили прерывание по переполнению. По логике, при частоте импульсов 2^15 Гц 16-разрядный таймер должен переполняться

Ничего не понял smile

У меня один раз так было, сижу смотрю мульты с антимульт.ру и бац экран гаснит, опять появляется изображение, а там куча элементов предыдуших кадров с новыми и всё хаотично движется, какие то звуки(наложение). короче ужас шо было smile

Автор: jimmi 13.1.2005, 18:03
Комманда BANKSEL у ПИКа есть, так как транслятор ассемблера не ругается, банки переключаются нормально, устанавливается тот банк памяти, в котором находится регистр, указанный операндом в этой комманде.
Ну я же не сам эту комманду придумал, а нашел в интернете в прошивке реально работающего http://kazus.ru/modules.php?name=Content&pa=showpage&pid=835.
В книге "Микроконтроллеры PIC16X7XX" автор В.А.Ульрих такой комманды действительно нет, но есть примеры с инициализацией портов. Например на странице 55
clrf PORTA
bsf STATUS,RPO ;Явно указываем банк 1
movlw 0xCF
movf TRISA

Автор: quarz 15.1.2005, 20:07
jimmi то что такой команды нет - только что проверил. В доке с microchip.com где расписывались двоичные коды АЛУ и мнемоника команды, banksel не было. Скорее всего это макрокоманда MPASM'a , который сам подставляет нужный регистр переключая RPx в зависимости от конкретного пика.

Автор: rcdimon 15.1.2005, 21:05
А мне очень интересно то, что такие команды как BANKSEL не написаны в книге по пикам от микрочипа. И там листинги программ без этого. А у нас без этого не работает. В чем же дело?

Автор: PILOT 15.1.2005, 21:36
BANKSEL - не команда видимо, а директива.

СУВ.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)