Jump to content

    
Sign in to follow this  
Petka

AvrUsb500 by Petka. продолжение

Recommended Posts

Petka, а когда планируется выход новой версии прошивки? Можно туда добавить мигание светодиодом при активности?

1) На днях появится прошивка с новой фичей, сейчас занимаюсь её отладкой.

2) Можно. А зачем?

Share this post


Link to post
Share on other sites
...

2) Можно. А зачем?

 

Ну для наглядности что-ли :) все равно светодиод есть уже. Глазу приятнее и видно что прошивается :)

Кстати, для диагностики удобнее будет сделать мигание при активности MISO, тем что если камень дохлый мигать не будет ничего.

 

P.S. А название фичи в новой прошивке секрет пока? :)

Edited by simer

Share this post


Link to post
Share on other sites
Глазу приятнее и видно что прошивается :)

А программа-программатор не наглядно показывает, программируется или нет?

P.S. А название фичи в новой прошивке секрет пока? :)

Терпение.

Share this post


Link to post
Share on other sites

собрал, зашил прогер, перемычку перекинул. при включении мигает, при подключении камня - горит диод. но понипрог не хочет видеть:( ошибк 24

помогите плиз:(

я новичок :rolleyes:

Share this post


Link to post
Share on other sites
собрал, зашил прогер, перемычку перекинул. при включении мигает, при подключении камня - горит диод. но понипрог не хочет видеть:( ошибк 24

помогите плиз:(

я новичок :rolleyes:

 

PonyProg не поддерживает этот программатор для прошивки таргета

Share this post


Link to post
Share on other sites

Подскажите, как надо правильно?

Я развел свою платку и изменил расположение сигналов

в порту C контроллера.

Изменил выводы в analog.h и spi.h,

а также контроллер и частоту в Makefile.

После компиляции получаю ошибку:

 

Compiling C: main.c

avr-gcc -c -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./main.lst -std=gnu99 -Wundef -MMD -MP -MF .dep/main.o.d main.c -o main.o

In file included from main.c:13:

timeout.h:12:1: warning: "F_CPU" redefined

<command-line>: warning: this is the location of the previous definition

main.c:816:1: error: macro "_cpl" requires 3 arguments, but only 2 given

main.c: In function '__vector_9':

main.c:816: error: '_cpl' undeclared (first use in this function)

main.c:816: error: (Each undeclared identifier is reported only once

main.c:816: error: for each function it appears in.)

make.exe: *** [main.o] Error 1

Edited by IURY

Share this post


Link to post
Share on other sites
Подскажите, как надо правильно?

 

main.c:816:1: error: macro "_cpl" requires 3 arguments, but only 2 given

main.c: In function '__vector_9':

main.c:816: error: '_cpl' undeclared (first use in this function)

где-то ошиблись в описании портов.

Share this post


Link to post
Share on other sites
где-то ошиблись в описании портов.

Если я выбираю atmega48, то компиляция успешна.

 

Обозначил(в исходниках ничего не трогал, кроме контроллера и частоты) :

PC5 - mosi

PC4 - rst_adc

PC3 - target_rst

PC2 - miso

PC1 - sck

Atmega8

7372800 Hz

Share this post


Link to post
Share on other sites

собрал ваш программатор на FT232BL и атмеге8. Атмегу прошил другим программатором от протоса. приподаче питания моргает, при подлючении камня загорается светодиод. На выходе 1 мГц не наблюдаю ни какой частоты. Она должна там присутствовать всё время? У протоса она там присутствует всё время, как тест правильной работы. И естественно соде вижен его не видит.

Share this post


Link to post
Share on other sites
Если я выбираю atmega48, то компиляция успешна.

 

Обозначил(в исходниках ничего не трогал, кроме контроллера и частоты) :

PC5 - mosi

PC4 - rst_adc

PC3 - target_rst

PC2 - miso

PC1 - sck

Atmega8

7372800 Hz

запакуйте zip'ом исходники, и выкладывайте сюда, посмотрю что там не собирается.

 

...приподаче питания моргает, при подлючении камня загорается светодиод. На выходе 1 мГц не наблюдаю ни какой частоты. Она должна там присутствовать всё время?

Нет, частота там присутствует только в режие "1MHz" по умолчанию программатор работает в режиме "fast".

И естественно соде вижен его не видит.

Ничего естественного. При правильной сборке программатор работает сразу. Пробовали заходить терминалкой на порт программатора (как написано в FAQ)?

Share this post


Link to post
Share on other sites

Доброго времени суток!

После продолжительной работы выкладываю на общее обсуждение следующую версию прошивки программатора.

Основное и единственное отличие новой версии - поддержка "printf - отладки".

Что это такое? При отладке программ зачастую необходимо знать, в какой стадии выполнения находится программа. Закончила ли подпрограмма вычисления или нет? Чему равно значение некоторой внутренней переменной? В каком порядке выполняются составные части алгоритма и прочие задачи.

Большую часть этих задач позволяет решить аппаратный отладчик. Однако не у всех есть возможность использования аппаратных отладчиков. Цена, дополнительные разъёмы, программная поддержка отладчика, неудобство или неумение использования - всё это может препятствовать использованию аппаратных отладчиков.

Что предлагается взамен? Многие в качестве альтернативы используют для отладки debug_printf, "my_printf", библиотечный printf. Вставляя в интересующие точки своих программ для контроллеров что-то типа:

printf("test point #1");

 

printf("internal var 'speed' = %i \n", speed);

 

Обычно вывод функций printf настраивается на uart. Однако это тоже требует некоторых накладных расходов: дополнительные разъёмы, выделенный uart специально для отладки, требования к частоте тактирования.

Предлагается использовать для вывода отладочного "printf" пины контроллера, которые используются для его программирования (MOSI, MISO, SCK). Всё равно на стадии отладки программатор уже подключен к чипу, есть все необходимые разъёмы и подключения. Штатный uart при этом в большинстве случаев останется свободным!

 

Осталось выбрать 3х-проводный интерфейс для передачи данных от чипа к программатору. Для себя я выбрал следующие требования к интерфейсу:

1) Интерфейс должен быть полностью синхронным. (Снимаем требования к частоте контроллеров. Контроллеры могут спать, снижать свою частоту и т.д.)

2) Интерфейс должен быть дуплексным. (Хочется не только получать данные, но и отправлять)

3) Любая сторона может на неограниченное время приостановить обмен (с обоих сторон контроллеры, которые могут производить передачу данных в фоновом, низкоприоритетном процессе). При этом передаваемые данные не должны разрушаться. Как результат этого требования обмен данными должен происходить на максимальной скорости, которую могут обеспечить ОБЕ стороны.

4) В протоколе должно быть заложено выделение границ слов в передаваемом битовом потоке.

 

Из известных мне протоколов ни один не смог удовлетворить вышеперечисленным требованиям.

Пришлось изобретать велосипед протокол. Что получилось и предлагаю обсудить:

Протокол называется "abd-протокол". В нём используются 3 линии:

"a" - линия тактирования. Для мастера выход, для слэйва вход.

"b" - возвратная линия тактирования. Для мастера вход, для слэйва выход.

"d" - двунаправленная линия данных. Является как входом так и выходом для двух сторон. Между мастером и слэйвом должен быть подключен последовательный токоограничивающий резистор, для обеспечения надёжной работы в моменты переключения выводов вход/выход.

 

Мастер наблюдает за состоянием линии "b". Если линия "b" переключилась в то же состояние, что и линия "a", - значит слэйв уже принял свой бит данных на линии "d", переключил линию на выход и выдал очередной свой бит на линию "d". После этого мастер может прочитать очередной бит от слэйва и выставить на передачу очередной свой бит. После этого мастер переводит состояние линии "a" в состояние, противоположное линии "b". И процесс повторяется заново.

Это общая идея обмена. Теперь детали: данные передаются в каждую сторону как на возрастающем фронте клоков, так и на спадающем. По одному фронту передаётся очередной бит в сдвиговый регистр приёмника, а по другому фронту выдаётся признак конца слова (тот момент, когда из сдвигового регистра можно читать данные). Кроме того в протокол заложена возможность остановить клоки, когда данных ни у мастера ни у слэйва нет. Более подробное описание содержится в исходниках (Файлы "abd.c" и "abd.h").

 

Этот протокол был реализован, оттестирован на моделях, а затем и в реальном железе. В программатор "by Petka" добавлена реализация слэйва протокола "abd".

Итого:

Для того, чтобы добавить в свою программу возможность отладки, надо в список компилируемых файлов проекта добавить "abd.c" и "abd_putchar.c". В main добавить:

 

#include "abd_putchar.h"

FILE abd_file = FDEV_SETUP_STREAM(abd_master_putchar, NULL, _FDEV_SETUP_WRITE);

int main(void){
    stderr = stdout = stdin = &abd_file;

Всё.

Теперь в любом месте можно просто писать:

        printf("Hello World! №%i\n", num);
        num++;

В прикрепленном к посту файле "abd_demo.zip" демка использования.

 

Как увидеть получившийся "Hello World!" ?

Прошиваете чип. Открываете терминалкой ком порт программатора, замыкаете перемычку "1Mhz" (программатор должен быть в режиме "fast"). И наблюдаете свой "Hello World!"!

Исходник сделан для winavr. С небольшими доработками будет работать и для любого другого компилятора. Скоро выложу портированные версии для других компиляторов.

abd_demo.zip

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this