CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

Demon писал(а):Не совсем подходит т.к. одну и туже библиотеку пользуют несколько МК одновременно

как такое возможно?! :shock:
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: CodeVision AVR в вопросах и ответах

Сообщение ibiza11 »

Так кто мешает определять контроллер в main.c, а проверку оставить в библиотеке?
Ставим плюсы: )
Demon
Нашел транзистор. Понюхал.
Сообщения: 164
Зарегистрирован: Сб янв 20, 2007 20:44:33
Откуда: Из закаулков вашей души

Re: CodeVision AVR в вопросах и ответах

Сообщение Demon »

ARV писал(а):
Demon писал(а):Не совсем подходит т.к. одну и туже библиотеку пользуют несколько МК одновременно

как такое возможно?! :shock:

Не совсем удачно выразился, имелось в виду что одну и ту же библиотеку использую в нескольких параллельных проектах.
Demon
Нашел транзистор. Понюхал.
Сообщения: 164
Зарегистрирован: Сб янв 20, 2007 20:44:33
Откуда: Из закаулков вашей души

Re: CodeVision AVR в вопросах и ответах

Сообщение Demon »

ibiza11 писал(а):Так кто мешает определять контроллер в main.c, а проверку оставить в библиотеке?

Вчера вечером так и пытался сделать, но ничего не получалось - выходила ошибка "неизвестный" TxSize. С утра сообразил, что сначала надо объявить #define c типом МК, а затем только include подключать требуемую библиотеку.
Спасибо за консультацию все заработало.
Wasily
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пн янв 16, 2012 09:19:44

Re: CodeVision AVR в вопросах и ответах

Сообщение Wasily »

:shock: Коты, подскажите почему когда я пишу
UCSRA |= (1<<TXC);
printf("%с",UCSRA);


я принимаю в терминале 0x60 (0b01100000), т.е. флаг установлен хотя я в него записал 1?


Мне это надо выяснить поскольку надо по завершению передачи выключать передатчик RS485.
Вот такой код например:
case CmnWritePrefTmr:
if(CmndSymb[0]==Adres1){ //zashita ot sluchainoi zapisi wsex esli komanda pridet с 100m adresom
EETimeTmr1=((unsigned long int)CmndSymb[2])*845;
TimeTmr1=EETimeTmr1;
UCSRA |= (1<<TXC);//sbros flaga txc
Rs485SendEN=1;
printf("NewTimeTmr1=%lu /845",TimeTmr1);
while(!(UCSRA & (1<<TXC)));
Rs485SendEN=0;

};
break;


МК принимает все отлично а в терминале получаю 09.04.2014 16:55:14.00 [RX] - NewTimeTmr2=845 /8ÿ.
И так везде. Только

UCSRA |= (1<<TXC);//sbros flaga txc
Rs485SendEN=1;
putsf("1");
while(!(UCSRA & (1<<TXC)));
Rs485SendEN=0;

работает отлично.
c717411
Встал на лапы
Сообщения: 148
Зарегистрирован: Ср дек 29, 2010 21:19:03

Re: CodeVision AVR в вопросах и ответах

Сообщение c717411 »

Wasily писал(а):я принимаю в терминале 0x60 (0b01100000), т.е. флаг установлен хотя я в него записал 1?
....
UCSRA |= (1<<TXC);//sbros flaga txc
...
UCSRA |= (1<<TXC);//sbros flaga txc
....

1 - флаг установлен
0 - флаг сброшен
Wasily
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пн янв 16, 2012 09:19:44

Re: CodeVision AVR в вопросах и ответах

Сообщение Wasily »

Не совсем понял, что вы хотели этим сказать.
Для сброса флага нужно в него записать 1 согласно даташиту.
Wasily
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пн янв 16, 2012 09:19:44

Re: CodeVision AVR в вопросах и ответах

Сообщение Wasily »

и как вынести функцию в другой файл?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

как вынести функцию в другой файл?
Скопировать функцию в буфер обмена, вставить текст в другой файл, удалить копируемый текст из первого файла :)
Wasily
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пн янв 16, 2012 09:19:44

Re: CodeVision AVR в вопросах и ответах

Сообщение Wasily »

Да, а как его обозвать и правильно include?
Пробовал и .h и .c и все ругается. :(
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

Wasily писал(а):Да, а как его обозвать и правильно include?
Пробовал и .h и .c и все ругается. :(

уж сколько раз твердили миру... а воз и ныне там.

в .h файлы выносятся макроопределения и прототипы функций, определения типов и описания вешних (или глобальных) переменных. в этих файлах по-хорошему не должно быть никаких реализаций функций!!!

в .c файлы вставяются #include со всеми .h файлами, необходимыми для всех функций, которые реализуются или используются в этом модуле. здесь же определяются все переменные.

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

Мой уютный бложик... заходите!
Wasily
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пн янв 16, 2012 09:19:44

Re: CodeVision AVR в вопросах и ответах

Сообщение Wasily »

Т.е. если я правильно понял то отдельно функцию которая будет вызываться из main неполучится?

я в main пишу
#include <stdio.h>
#include <mega8.h>
#include <delay.h>

и #include "readRx.c"

readRx.c добавляю в проект, там функция обработчик которая получает и передает в main. Но не выходит.

2) Вы как главный эксперт подскажите по главной проблеме с :shock:
UCSRA |= (1<<TXC);
printf("%с",UCSRA);

и ниже
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

я даже разволновался: может, я пишу не по-русски? перечитал - вроде нет...

итак, разжевываю:

1. ваш проект состоит из 2 модулей main.c и readrx.c
2. оба этих файла вы добавили в проект
3. чтобы функции readrx.c были доступны в main.c вы обязаны создать readrx.h, в котором описать прототип вашей функции - не знаю, какая там она у вас.
4. в main.c вы пишите #include "readrx.h"
5. компилируете

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

Мой уютный бложик... заходите!
Wasily
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пн янв 16, 2012 09:19:44

Re: CodeVision AVR в вопросах и ответах

Сообщение Wasily »

Вот теперь понятно! огромное спасибо.

Еще подскажите по флагам TXC плз :beer:
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

Wasily писал(а):Еще подскажите по флагам TXC плз :beer:

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

Мой уютный бложик... заходите!
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: CodeVision AVR в вопросах и ответах

Сообщение Gudd-Head »

ARV писал(а):я не понял вашей проблемы.

Не сбрасывается флаг у него viewtopic.php?p=1980627#p1980627
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

"не сбрасывается флаг" - это фигня непонятная. я вижу, что он выводит (неужели в USART?!) содержимое регистра и при этом он ждет, что в этом регистре не будет флага?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: CodeVision AVR в вопросах и ответах

Сообщение ibiza11 »

Wasily писал(а)::shock: Коты, подскажите почему когда я пишу
UCSRA |= (1<<TXC);
printf("%с",UCSRA);

я принимаю в терминале 0x60 (0b01100000), т.е. флаг установлен хотя я в него записал 1?
попробуйте так:

Код: Выделить всё

uint8_t tmp;
...
UCSRA |= (1<<TXC);
tmp UCSRA;
printf("%с",tmp); 
Ставим плюсы: )
Wasily
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пн янв 16, 2012 09:19:44

Re: CodeVision AVR в вопросах и ответах

Сообщение Wasily »

ARV писал(а):uint8_t tmp;
...
UCSRA |= (1<<TXC);
tmp = UCSRA;
printf("%с",tmp); 

И так я делал, только переменная была temp. :))
После чип erase c флагами стало все ок!

Сейчас провел эксперимент очередной:

Если запустить такой код после reset (запускается после нажатии кнопки однократно):

Rs485SendEN=1;
printf("%c",UCSRA);
delay_us(550);
Rs485SendEN=0;

Получаем в первый раз 11.04.2014 09:58:25.68 [RX] - 0х20 что и должно быть!
После второго раза получаем 0х60 что тоже отлично, т.к. флаг не сбрасывался!

Но, как только убираю delay и ставлю while(!(UCSRA & (1<<TXC)));
приходит FF, т.е. передатчик раньше отключается до завершения передачи.
Если посылать длинную посылку то не приходят 2 последних символа.
В чем ошибка?
Последний раз редактировалось Wasily Пт апр 11, 2014 06:38:57, всего редактировалось 5 раз.
Wasily
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пн янв 16, 2012 09:19:44

Re: CodeVision AVR в вопросах и ответах

Сообщение Wasily »

ARV писал(а):"не сбрасывается флаг" - это фигня непонятная. я вижу, что он выводит (неужели в USART?!) содержимое регистра и при этом он ждет, что в этом регистре не будет флага?!


Да в USART через ADM485.


А в чем я ошибаюсь так уж сильно :dont_know:
Флаг TXC должен устанавливаться толко после того как последний байт вышел из UDR и нет новых на входе.
Ответить

Вернуться в «AVR»