Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Нужна помощ с UART ATmega16
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Costia
МК ATmega16 (dip) обвес нечего примечательного диодный каскад и пара кнопочек + кондюк резистр и диод на резе.

MAx232EPE (dip) обвес конденсаторы(105) выполненено по схеме


Все это питаю от USB

Пишу на CodeVisioAVR

Код
#include <mega16.h>
#include <stdio.h>

void initialization(void){
DDRA = 0xFF;
PORTA = 0xFF;
TCCR0 = 0x05;

UCSRA=0x00;
UCSRB=0x10;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x0C; }

void main (void){
initialization();
while (1){
PORTA++;
putsf("hello world");
while (!(TIFR&0x01));
TIFR = 0x01;
};
}




прошиваю через COM с помощью UNIPROF
дальше все это подключаю и мониторю с помощью LookRS232 и ComVC и там и там "helloworld" не наблюдаю но обе программы конектятся и пишут что все гуд , попытался замкнут ношки max232 *11 - 12) сообщения назад не возращается . попытался замкнут 2-3 ножки комп порта результат нулевой. вследствии того что прошиваю я через com port отпадает вариант что он не рабочий. Диоды на мк мигают все гуд значет мк тоже работает.

материал брал с http://www.123avr.com/z4.htm
LamerMan
Для начала можно попробовать просто записать один символ в регистр uart, не пользуясь putsf.
Когда ты замыкаешь на компе TX и RX по идее буковки, которые ты посылаешь через терминал, должны появляться в терминале без включенного локального эха. Если локальное эхо включено - появятся сразу две буквы. Вообще ничего не появляется?
SysRq
По линку написано, что перемычки CTS\RTS и DTR\DSR не обязательны. Ежели у вас их нет, то управление потоком в настройках порта на компе ставить исключительно как "Нет", иначе замыкание RX на TX в любом месте схемы ничего не даст.

Ну и разделительной емкости между питанием и землей не видать, у меня MAX3232 не заводился без нее толком при питании от USB О_о
Costia
Цитата(SysRq @ Aug 3 2008, 21:11) *
По линку написано, что перемычки CTS\RTS и DTR\DSR не обязательны. Ежели у вас их нет, то управление потоком в настройках порта на компе ставить исключительно как "Нет", иначе замыкание RX на TX в любом месте схемы ничего не даст.

Ну и разделительной емкости между питанием и землей не видать, у меня MAX3232 не заводился без нее толком при питании от USB О_о



Если не сложно можно по подробнее что за разделительная емкость ?

да, у меня стоят перемычки .

Если точнее то когда ставлю замыкаю Rx Tx на максе и в програме COmVS отсылаю символы то возращаются какито цифры ???

УБрал перемычки CTS-RTS и DTR-DSR замкнул Rx Tx LookRS232 молчит как партезеан а ComVs при передачи сылается на ошибку .
SysRq
Цитата(Costia @ Aug 3 2008, 21:30) *
Если не сложно можно по подробнее что за разделительная емкость ?

Costia
Я вот про это и говарил .... я проверял все уже по 10 раз все правельно(кроме моего написания) все по схеме все прозвонено дважды и просмотренно и все не работает ........ Конденсатор подцепил между питанием и землей и нефига не пашет а прога comvs выдает ошибку при отправки ?????????? а есть каконебуд мение капризный интерфейс ?

Я тут подумал что по идеи надо сначало добиватся чтобы при замыкания Tx Rx на комп порте должны биты возращатся . Если ктонебуд делал можно поподробно, с помощью каких программ мониторили и как замыкали ?
LamerMan
Цитата(Costia @ Aug 3 2008, 22:02) *
Я тут подумал что по идеи надо сначало добиватся чтобы при замыкания Tx Rx на комп порте должны биты возращатся . Если ктонебуд делал можно поподробно, с помощью каких программ мониторили и как замыкали ?


в linux есть программа minicom, в windows есть hyper terminal. Я просто замыкаю rx и tx и смотрю как выводится эхо вводимых данных. Как было сказано выше нужно выставить управление потоком в none, если стоит hardware или software.
Aesthete Animus
Советую такую последовательность действий:
1. Запускаете терминалку (я предпочитаю Zoc, для непривередливых подойдет и HyperTerminal), замыкаете txd rxd без подключения Вашего девайса и наблюдаете эхо сигнал. В противном случае ищем багу на компе.
2. Подключаете Ваш девайс и дергаете ножкой txd со стороны PC, при этом щупаете мультиметром за нужку 12 максика (за rxd со стороны меги) и наблюдаете за изменением сигнала. Если все происходит ожидаемо - можно двигаться дальше. Иначе - ищем багу в цепи txd.
3. Замыкаете выходы txd-rxd максика со стороны меги. При этом мегу нужно либо вовсе вытащить (если она в дип колодке) или стереть прошивку в меге - во избежании несчатных случаев. Опять же, дергаете ножкой txd со стороны PC и наблюдаете за ножкой 14 максика (RXD со стороны PC). Уровень на ней должен изменяться примерно от примерно -7.5 до +7.5 вольт в карйних положениях. Если это так, то все должно работать. (Естесственно, txd rxd надо разомкнуть)

P.S. Проверьте, снять ли ресет с контроллера
P.P.S. Ссылки на сайт avr123 на этом форуме считаются дурным тоном.
P.P.P.S. Если всеже перейдете на avr gcc, то с примерами будет проще wink.gif

Так же отмечу, что врятли кто будет разбираться, что означает строчка типа такой
"UCSRC=0x86"
Обычно этом записывают ввиде битовых сдвигов в перемешку с битовым "или" - читать такой код проще.
Costia
Попробовал Виндовз терминал , выполнен он конечно в лучших традициях виндовз но я не догнал как там сообщения отсылать , попробовал файл - не увенчалось успехом говарит о сетевой ошибки . управления потоком стоит - ноне и когда я в программе ComVs отсылаю сообщения возращаются биты но в текст он не переводит а тока в 10ричиную систему . как только отключаю питание max232 биты не приходят следственно .... чтота есть но хваленая LookRS232 все есче молчит
Aesthete Animus
Цитата(Costia @ Aug 3 2008, 23:22) *
Попробовал Виндовз терминал , выполнен он конечно в лучших традициях виндовз но я не догнал как там сообщения отсылать , попробовал файл - не увенчалось успехом говарит о сетевой ошибки . управления потоком стоит - ноне и когда я в программе ComVs отсылаю сообщения возращаются биты но в текст он не переводит а тока в 10ричиную систему . как только отключаю питание max232 биты не приходят следственно .... чтота есть но хваленая LookRS232 все есче молчит

Вообще-то, при нажатии на клавиши терминалка посылает в порт код нажатого символа... О каком сообщении Вы говорите, какие биты у вас там ходят - мне не понятно. Скачайте триальную версию zoc`а.
Costia
Попробовал эту программу чесно говаря лень даже в нее везжать ..
что касается битов то они просто в логе пишутся .

Колличество установленных СОМ портов:
COM3
COM1

Базовый регистр порта : $3F8

00:02:42 $FF 1 1 1 1 1 1 1 1 [ 1 ] 255

Подключено к : Com1

00:02:51 $00 0 0 0 0 0 0 0 0 [ 2 ] 0
00:03:30 $31 0 0 0 1 0 1 0 0 [ 3 ] 72
00:03:30 $00 0 0 0 0 0 0 0 0 [ 4 ] 0


Какие могут быть причины отсуствия " Эхо " я бы уже полез в биос но дело в том что прошиваю мк я через комп порт и не жалуюсь ???

все я разобрался с виндовым терминалом там одно окно и в него призодят символы которые приходят от порта я питания выключа и по клаве стучу и символов нет клаву покдлюча И ВОТ ОНО эХОООО
ураа !!!!

судя по своим сообщениям я туплю не хуже своиего UART а .. извеняюсь просто спать хочется Но это дело принципов !

так я замыкал контакты на максе тоесть и адптер в порядке но когда мк поключаю hello world нету тоесть проблема с мк .... дайте пожалуйста код для мк который какоенебуд сообщения через уарт передает с учетом что у меня встроенный тактовый гениратор и мега16
Aesthete Animus
Цитата(Costia @ Aug 4 2008, 00:11) *
все я разобрался с виндовым терминалом там одно окно и в него призодят символы которые приходят от порта я питания выключа и по клаве стучу и символов нет клаву покдлюча И ВОТ ОНО эХОООО
ураа !!!!

Ну да, так и должно быть... Кстати, где стоит перемычка, со стороны меги или со стороны PC? Или это мега шлет эхо?
Costia
со стороны меги я выдернул её из колодки и зымакаю ножки ..
Aesthete Animus
Теперь кстати не лишним будет заставить как раз мегу слать эхо. Я так обычно проверяю работоспособность ком порта wink.gif
Costia
а код даш ???
Aesthete Animus
Пример срихтован из какого-то старого исходника для avr gcc, так что где-то могут быть опечатки, а может вообще не заработает под CV biggrin.gif

Код
#include ... // Я хз какие хидеры надо подключать в CV,

#define F_CPU 16000000UL
#define BAUD 38400 // Скорость COM порта

void uart_init(unsigned short ubrr)
{
    UBRRH = (unsigned char)(ubrr >> 8);
    UBRRL = (unsigned char)ubrr;
    UCSRB = (1 << RXEN)|(1 << TXEN);    
    UCSRC = (1 << URSEL)|(1 << UCSZ1)|(1 << UCSZ0);
}


uart_send(unsigned char b)
{
    while ( !(UCSRA & (1 << UDRE)) );
    UDR = b;
}

unsigned char uart_rcvr(void)
{
    while ( !(UCSRA & (1<<RXC)) );
    return UDR;
}


int main(void)
{
    unsigned char b;

    uart_init(F_CPU/16/BAUD - 1);

    for (;;)
    {
        b = uart_rcvr(); // Блокируемся и ждем символа
        uart_send(b); // Блокируемся и ждем пока символ отправится
    }

    return 0;
}
Costia
одним словом код странный проще самому изобразить ... напиши плиз как ты реализуеш отправку какогонебуд сообщения по uart, а лучше какуюниебуд инфу
Aesthete Animus
Ну во первых, о каком сообщении идет речь? RS232 - байт-ориентированный интерфейс. Вы можите послать байт, можите послать последовательность (независимых байтов), можите сами порезат это на пакеты и слать "сообщения". Главное что нужно иметь - это функция посылки/ приема одного байта. У меня это uart_recv/uart_send. Дальше, если хотим послать буфер, то в простейшем случае делаем так:

Код
void uart_write(void *vbuffer, size_t size)
{
    register unsigned char *buffer = (unsigned char*)buffer;
    
    while (size--)
    {
        uart_send(*buffer);
        buffer++;
    }
}

int
main (void)
{
    ...
    char message[] = "Hello, world\n";
    
    uart_write(message, sizeof(message)); // message отводится на стадии компиляции,
                                                             // поэтому sizeof здесь допустимо использовать.
    ...
}


В Си есть такая замечательная функция как printf - незаменимая вещь при отладке. Разберитесь, как ее использовать с вашим компилятором. Заодно, покурите доки на то, что вообще такое RS232 и как он работает. В общем, RTFM...
Costia
Уважаемые тут возник такой момент что я подумал а вдруг avr123 пиздеж и провакация и сделал все в лучших традициях этой статьи
http://www.pcports.ru/articles/avr6.php
и что вы думает все заработало ... но вот суть вопроса . в программе Terminal v1.9b все работает как и обещали а вот в программе LookRS232 & COMVS нефига не работает тоесть не эха не сообщения ... чем это может быть вызвано ?
Aesthete Animus
Цитата(Costia @ Aug 5 2008, 22:42) *
...чем это может быть вызвано ?

Это скорее всего связано с игнорированием Вами официальной документации, а также с поиском готовых решений вместо создания своих! К тому же, пример http://www.pcports.ru/articles/avr6.php сделан по меньшей мере безграмототно.
Costia
Дело в том что я глубоко убежден что многие вещи нельзя преодалеть с прышка а следовательно если действовать по шагова то надо разобратся с железом и проверить его роботоспособность другова варианта кроме как использования чужова кода я не вижу !
Aesthete Animus
Цитата(Costia @ Aug 6 2008, 00:14) *
...другова варианта кроме как использования чужова кода я не вижу !

Другой вариант - читать даташиты, Application Notes.
zltigo
Цитата(Costia @ Aug 5 2008, 22:14) *
Дело в том что...

Модератор:
Дело в том, что на форуме принят русский язык общения. Не сочтите за труд придерживаться хоть сколь-нибудь близких к литературному русскому норм правописания.
Costia
НАсчет официальной документации .. я буду вам благодарен если поделитесь такой . енглиш знаю только азы поэтому дш на енгле читать затруднительно .

Модератор . Я учту ваши замечания .
Aesthete Animus
Во-первых, http://atmel.com/dyn/resources/prod_documents/doc2466.pdf
Во-вторых, здес много полезного http://atmel.com/dyn/products/app_notes.asp?family_id=607
В-третьих, я лично не встречал хороших переводов даташитов. Да и не нужно это, доки пишутся простым техническим языком - достаточно элементарных знаний языка и электронного словаря под рукой.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.