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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
pashaumnov
Прорезались зубы
Сообщения: 236
Зарегистрирован: Чт июн 25, 2009 16:00:25
Откуда: нижний новгород

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

Сообщение pashaumnov »

a_skr писал(а): Схему подключения, осциллограмму PB0, PB1, PB2 приведите.

проверил еще раз , код рабочий, беру свои слова обратно. извините за то что дезинформировал вас. у меня были не правильно ножки подключены к сдвиговому регистру порт Б1 был подключен к sh-cp еще раз извините. все отлично работает , спасибо .
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

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

Сообщение a_skr »

Ура! :))
22.3% (char - 8 бит). Кто меньше?
vitalik_1984, код меньше предоставите? :)
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Доброй ночи_)
Подскажите что за беда?
Пробую подключить к МЕГЕ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 в вопросах и ответах

Сообщение oleg110592 »

из хэлпа:
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.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Тоесть нужно либо с проекта активировать шину, либо со строками ассемблера, но не одновременно?
Я проект когда создавал галочку ставил в настройках 1wire, значит код ассемблера не нужно ставить?
Я правильно понимаю? У меня с английским ато не очень гуд....
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

галочку в настройках 1wire, код ассемблера выбросить
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Ок. Спасибо, так и сделал :)
Компилирует теперь нормально, без ошибок, но только датчик не определяется...

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

 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" ); } 


Вот код. В симуляции проследил, что не выполняется код, который должен выполняться при инициализации датчика. Вместо этого выполнение сразу переходит к else и на экране выходит надпись "NOT DS18B20".
Подтяжка ноги данных датчика в протеусе на "+" через резюк 4к7 стоит.
В чём может быть причина?
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Нашёл косяк... В протеусе частота кварца была 1МГц, а в проекте 8. Никогда бы не подумал что от этого может такое быть... Дисплей ведь работал...
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Ага сравнили шину 1 wire и дисплей. В шине временной интервал бита, которые за все возможные рамки выходит. а в дисплее ограниченная скорость работы, все операции занимают не менее определенного времени, чем больше, тем лучше. А каждый байт фиксируется пином EN.
a_skr писал(а):vitalik_1984, код меньше предоставите?
:facepalm: :oops: Да я дунул конечно в 255 раз меньше :))) ночью написал. А вообще мне кажется можно попытаться написать меньше код.Я ж сразу написал, что мне так кажется, а не то что я на сто уверен.

PS Проверил... Выделение кода в функции не дает выигрыша в коде. Разве что похожие эффекты проще добавлять становится.
Таймер тоже не помог. Разве что у процессора больше времени стало полезного. Но опять же для полного освобождения нужно по другому построить сами эффекты.
Александр 2677
Встал на лапы
Сообщения: 89
Зарегистрирован: Пн фев 22, 2010 11:16:00

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

Сообщение Александр 2677 »

Такой вопрос. Хочу в char str[80]; добавить текст

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

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 в вопросах и ответах

Сообщение vitalik_1984 »

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

sprintf (str, "TEXT=%d TEST2",num);// может так?  
Александр 2677
Встал на лапы
Сообщения: 89
Зарегистрирован: Пн фев 22, 2010 11:16:00

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

Сообщение Александр 2677 »

А что такое num? У меня компилятор ругается на него.
Александр 2677
Встал на лапы
Сообщения: 89
Зарегистрирован: Пн фев 22, 2010 11:16:00

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

Сообщение Александр 2677 »

Убрал num получил желаемый результат :))) Спасибо.

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

sprintf (str, "TEXT=%s TEST3");
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

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

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

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

Ну вообще, как то странно... Текст "TEST=" человек вывести может, а текст "TEST2" - нет :roll:
Александр 2677
Встал на лапы
Сообщения: 89
Зарегистрирован: Пн фев 22, 2010 11:16:00

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

Сообщение Александр 2677 »

Мне нужно было в строку добавлять тот или иной текст, как бы наращивая его. С этим я справился с вашей помощью. Хотя я ещё не разобрался с num, нужен ли он мне в данном случае, без него работает как надо.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Опять я к а вам с датчиком температуры. :oops:
Что то не так с этой хернёй у меня...
Вот сделал проект в CVAVR и протеусе. Как видите, там единственная строка, и та работает с ошибкой. В протеусе выставляю температуру 20 градусов, и делаю проверку (если температура не равна 20, то PORTB.4 = 1)
С какого то чёрта значение температуры в один момент резко сглюкивает (раньше был у меня дисплей в проекте, он показывал в этот момент хрень какую-то, а потом сразу значение температуры восстанавливалось). Убрал из кода всё пока искал в чём косяк. Косяк в строчке где присваивается значение переменной temper (больше там и ничего не осталось :)) )
Кварц сделал 4МГц, как в хелпе на библиотеку - не помогло. Посмотрите пожалуйста свойства проекта и правильность использования библиотеки, ато я впервые с датчиком работаю этим, и уже часов 6 не могу причину найти.... :(

Светодиод загорится не сразу. Нужно время от 1 до 5мин. Процесс ускоряется, если к любой ноге порта В подключить светодиод, катодом к пину.
Вложения
Термостат.rar
(102.95 КБ) 243 скачивания
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Есть какие нибудь мысли? Всё уже что в голову пришло перепробовал, не пойму что за хрень.... А может у меня у одного он глючит?
И задержка огромная во время измерения показаний... Так должно быть? Ато от такого мигания глаза лезут на ж... :write:
Последний раз редактировалось isx Сб дек 14, 2013 02:21:49, всего редактировалось 1 раз.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Александр 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;


Александр 2677 писал(а):Хотя я ещё не разобрался с num, нужен ли он мне в данном случае, без него работает как надо.

Так если есть числа, то вместо num можно поставить свою переменную...
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

isx писал(а):Есть какие нибудь мысли?

1 это попробовать убрать: ds18b20_init( 0, -50, 60, DS18B20_10BIT_RES );
2 попробовать другую версию CodeVision
3 использовать стороннюю библиотеку
Ответить

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