проверил еще раз , код рабочий, беру свои слова обратно. извините за то что дезинформировал вас. у меня были не правильно ножки подключены к сдвиговому регистру порт Б1 был подключен к sh-cp еще раз извините. все отлично работает , спасибо .a_skr писал(а): Схему подключения, осциллограмму PB0, PB1, PB2 приведите.
CodeVision AVR в вопросах и ответах
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
- Реклама
Re: CodeVision AVR в вопросах и ответах
Ура!

vitalik_1984, код меньше предоставите?22.3% (char - 8 бит). Кто меньше?
Re: CodeVision AVR в вопросах и ответах
Доброй ночи_)
Подскажите что за беда?
Пробую подключить к МЕГЕ8 DS18B20.
Вот часть кода:
Так вот, со строками
вылетает ошибка
Что делать? Куда копать?
Подскажите что за беда?
Пробую подключить к МЕГЕ8 DS18B20.
Вот часть кода:
Код: Выделить всё
#include <mega8.h>
#include <io.h>
#include <delay.h>
#include <string.h>
#include <ds18b20.h>
// 1 Wire Bus functions
#asm
.equ __w1_port=0x18; PORTB
.equ __w1_bit=0
#endasm
#include <1wire.h>
#include <alcd.h>Код: Выделить всё
#asm
.equ __w1_port=0x18; PORTB
.equ __w1_bit=0
#endasmа без них датчик не обнаруживается?invalid redefinition of w1 port
invalid redefinition of w1 bit
Что делать? Куда копать?
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: CodeVision AVR в вопросах и ответах
из хэлпа:
The 1 Wire functions must be configured, by specifying the I/O port and bit used for communication through the 1 Wire protocol.
This is accomplished in the Project|Configure|C Compiler|Libraries|1 Wire menu:
· the Enable 1 Wire Bus Interface Support option must be activated
· the I/O Port and Bit must be specified in Data Connection.
Note: For compatibility with projects developed with CodeVisionAVR prior to V2.04.7, the 1 Wire functions can also be configured as outlined in the example below.
However in this case, the Enable 1 Wire Bus Interface Support option must be disabled in the Project|Configure|C Compiler|Libraries|1 Wire menu.
Example:
/* the 1 Wire bus is connected to ATmega8515 PORTB
the data signal is bit 2 */
#asm
.equ __w1_port=0x18
.equ __w1_bit=2
#endasm
/* now you can include the 1 Wire Functions */
#include <1wire.h>
This method is not recommended for new projects and it also does not support the XMEGA chips.
Re: CodeVision AVR в вопросах и ответах
Тоесть нужно либо с проекта активировать шину, либо со строками ассемблера, но не одновременно?
Я проект когда создавал галочку ставил в настройках 1wire, значит код ассемблера не нужно ставить?
Я правильно понимаю? У меня с английским ато не очень гуд....
Я проект когда создавал галочку ставил в настройках 1wire, значит код ассемблера не нужно ставить?
Я правильно понимаю? У меня с английским ато не очень гуд....
- Реклама
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: CodeVision AVR в вопросах и ответах
галочку в настройках 1wire, код ассемблера выбросить
Re: CodeVision AVR в вопросах и ответах
Ок. Спасибо, так и сделал 
Компилирует теперь нормально, без ошибок, но только датчик не определяется...
Вот код. В симуляции проследил, что не выполняется код, который должен выполняться при инициализации датчика. Вместо этого выполнение сразу переходит к else и на экране выходит надпись "NOT DS18B20".
Подтяжка ноги данных датчика в протеусе на "+" через резюк 4к7 стоит.
В чём может быть причина?
Компилирует теперь нормально, без ошибок, но только датчик не определяется...
Код: Выделить всё
if( ds18b20_init( 0, -50, 60, DS18B20_12BIT_RES ) ) //инициализация датчика. Анализ присутствия датчика
{
while( 1 ){
temper=ds18b20_temperature( 0 );
delay_ms( 30 );
if( temper>1000 ) { temper=4096-temper; temper=-temper; }
sprintf( lcd_buf,"t %u\xdfC", temper );
lcd_clear( );
lcd_gotoxy( 0,0 );
lcd_puts( lcd_buf ); }
}
else {lcd_clear( ); lcd_puts( "NOT DS18B20" ); } Подтяжка ноги данных датчика в протеусе на "+" через резюк 4к7 стоит.
В чём может быть причина?
Re: CodeVision AVR в вопросах и ответах
Нашёл косяк... В протеусе частота кварца была 1МГц, а в проекте 8. Никогда бы не подумал что от этого может такое быть... Дисплей ведь работал...
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Ага сравнили шину 1 wire и дисплей. В шине временной интервал бита, которые за все возможные рамки выходит. а в дисплее ограниченная скорость работы, все операции занимают не менее определенного времени, чем больше, тем лучше. А каждый байт фиксируется пином EN.
Да я дунул конечно в 255 раз меньше
ночью написал. А вообще мне кажется можно попытаться написать меньше код.Я ж сразу написал, что мне так кажется, а не то что я на сто уверен.
PS Проверил... Выделение кода в функции не дает выигрыша в коде. Разве что похожие эффекты проще добавлять становится.
Таймер тоже не помог. Разве что у процессора больше времени стало полезного. Но опять же для полного освобождения нужно по другому построить сами эффекты.
a_skr писал(а):vitalik_1984, код меньше предоставите?
PS Проверил... Выделение кода в функции не дает выигрыша в коде. Разве что похожие эффекты проще добавлять становится.
Таймер тоже не помог. Разве что у процессора больше времени стало полезного. Но опять же для полного освобождения нужно по другому построить сами эффекты.
-
Александр 2677
- Встал на лапы
- Сообщения: 89
- Зарегистрирован: Пн фев 22, 2010 11:16:00
Re: CodeVision AVR в вопросах и ответах
Такой вопрос. Хочу в char str[80]; добавить текст
Если заранее объявить переменную и поместить туда текст, то проблем нет.
Я видел пример http://www.c-cpp.ru/content/sprintf где текст добавляется без объявления переменной, но у меня вместо текста в терминал выходит пустота.(
Код: Выделить всё
char t[]="TEST1";
sprintf (str, "TEXT=%s ", t);//так работает
sprintf (str, "TEXT=%s ", "TEST2");//так не работает Если заранее объявить переменную и поместить туда текст, то проблем нет.
Я видел пример http://www.c-cpp.ru/content/sprintf где текст добавляется без объявления переменной, но у меня вместо текста в терминал выходит пустота.(
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Код: Выделить всё
sprintf (str, "TEXT=%d TEST2",num);// может так? -
Александр 2677
- Встал на лапы
- Сообщения: 89
- Зарегистрирован: Пн фев 22, 2010 11:16:00
Re: CodeVision AVR в вопросах и ответах
А что такое num? У меня компилятор ругается на него.
-
Александр 2677
- Встал на лапы
- Сообщения: 89
- Зарегистрирован: Пн фев 22, 2010 11:16:00
Re: CodeVision AVR в вопросах и ответах
Убрал num получил желаемый результат
Спасибо.
Код: Выделить всё
sprintf (str, "TEXT=%s TEST3");- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Может справку по функции для интереса почитаете?
num это переменная с числом NUMber ни о чем не говорит вам?
num это переменная с числом NUMber ни о чем не говорит вам?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Ну вообще, как то странно... Текст "TEST=" человек вывести может, а текст "TEST2" - нет 
-
Александр 2677
- Встал на лапы
- Сообщения: 89
- Зарегистрирован: Пн фев 22, 2010 11:16:00
Re: CodeVision AVR в вопросах и ответах
Мне нужно было в строку добавлять тот или иной текст, как бы наращивая его. С этим я справился с вашей помощью. Хотя я ещё не разобрался с num, нужен ли он мне в данном случае, без него работает как надо.
Re: CodeVision AVR в вопросах и ответах
Опять я к а вам с датчиком температуры.
Что то не так с этой хернёй у меня...
Вот сделал проект в CVAVR и протеусе. Как видите, там единственная строка, и та работает с ошибкой. В протеусе выставляю температуру 20 градусов, и делаю проверку (если температура не равна 20, то PORTB.4 = 1)
С какого то чёрта значение температуры в один момент резко сглюкивает (раньше был у меня дисплей в проекте, он показывал в этот момент хрень какую-то, а потом сразу значение температуры восстанавливалось). Убрал из кода всё пока искал в чём косяк. Косяк в строчке где присваивается значение переменной temper (больше там и ничего не осталось
)
Кварц сделал 4МГц, как в хелпе на библиотеку - не помогло. Посмотрите пожалуйста свойства проекта и правильность использования библиотеки, ато я впервые с датчиком работаю этим, и уже часов 6 не могу причину найти....
Светодиод загорится не сразу. Нужно время от 1 до 5мин. Процесс ускоряется, если к любой ноге порта В подключить светодиод, катодом к пину.
Что то не так с этой хернёй у меня...
Вот сделал проект в CVAVR и протеусе. Как видите, там единственная строка, и та работает с ошибкой. В протеусе выставляю температуру 20 градусов, и делаю проверку (если температура не равна 20, то PORTB.4 = 1)
С какого то чёрта значение температуры в один момент резко сглюкивает (раньше был у меня дисплей в проекте, он показывал в этот момент хрень какую-то, а потом сразу значение температуры восстанавливалось). Убрал из кода всё пока искал в чём косяк. Косяк в строчке где присваивается значение переменной temper (больше там и ничего не осталось
Кварц сделал 4МГц, как в хелпе на библиотеку - не помогло. Посмотрите пожалуйста свойства проекта и правильность использования библиотеки, ато я впервые с датчиком работаю этим, и уже часов 6 не могу причину найти....
Светодиод загорится не сразу. Нужно время от 1 до 5мин. Процесс ускоряется, если к любой ноге порта В подключить светодиод, катодом к пину.
- Вложения
-
- Термостат.rar
- (102.95 КБ) 243 скачивания
Re: CodeVision AVR в вопросах и ответах
Есть какие нибудь мысли? Всё уже что в голову пришло перепробовал, не пойму что за хрень.... А может у меня у одного он глючит?
И задержка огромная во время измерения показаний... Так должно быть? Ато от такого мигания глаза лезут на ж...
И задержка огромная во время измерения показаний... Так должно быть? Ато от такого мигания глаза лезут на ж...
Последний раз редактировалось isx Сб дек 14, 2013 02:21:49, всего редактировалось 1 раз.
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Как то наращивая и прибавляя интерактивно можно так:Александр 2677 писал(а):Мне нужно было в строку добавлять тот или иной текст, как бы наращивая его.
Код: Выделить всё
char t[]="TEST1";
char t2[]="TEST2";
sprintf (str, "TEXT=%s Text2=%s ", t , t2)//Интерактивно приращивать я думаю так можно.
sprintf (str, "%sAdded text",str) // Попробуйте так может и срастется :)))
sprintf (str, "TEXT=%s Text2=%p ", t ,"string" )//Может так еще?
's' - the function argument is a pointer to a null terminated char string located in RAM
'p' - the function argument is a pointer to a null terminated char string located in FLASH;
Так если есть числа, то вместо num можно поставить свою переменную...Александр 2677 писал(а):Хотя я ещё не разобрался с num, нужен ли он мне в данном случае, без него работает как надо.
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: CodeVision AVR в вопросах и ответах
1 это попробовать убрать: ds18b20_init( 0, -50, 60, DS18B20_10BIT_RES );isx писал(а):Есть какие нибудь мысли?
2 попробовать другую версию CodeVision
3 использовать стороннюю библиотеку


