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

Обсуждаем контроллеры компании Atmel.
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

java писал(а):Спасибо :shock: Нет, я лучше подберу где-нибудь на свалке старенький комп, специально для программатора.
Ну да это точно проще чем винду переставить, ппц :)
Контактная информация:
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 45
Зарегистрирован: Вс ноя 29, 2009 10:32:34
Откуда: Воронеж

Сообщение volt133 »

как не старался пишет что проблема с доступом к файлу IOPORT.sys хоть с правами админа запускал хоть без них, и с установкой тоже самое
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

а файл-то есть?))) семерка 64 бита?
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вт сен 29, 2009 09:28:51
Откуда: Ульяновск

Сообщение a.garkin »

Привет!
Подскажите в чем может быть дело?
Взял за основу http://chipenable.ru/index.php/programm ... llere.html
Решил добавить туда термометр в проект, добавил также модульно т.е отдельным файлом. Все компилируется/работает. Но!!! температура с датчика опрашивается один раз, сбрасываю контроллер и если температура изменилась то и на дисплеи меняется, т.е не работает цикл. Подскажите как правильно написать цикл? while (1) в оде термометра не работает ибо просто программа доходит до этого места и по кругу, т.е часы перестают идти...
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Держит паяльник хвостом
Аватара пользователя
Сообщения: 962
Зарегистрирован: Вт янв 04, 2011 13:26:17
Откуда: Лен.Обл.

Сообщение java »

BCluster писал(а):Ну да это точно проще чем винду переставить, ппц :)
Не вижу смысла.Винду я сам не ставлю, отдаю знакомому, он ставит свою, перебранную гибрид из ХР и висты. Так вот, я проверял программатор на ноутбуке и двух стареньких компах, он работал нормально, а система стоит на всех одинаковая, и на моём компе тоже. Это засада в железе. жаль конечно, придётся для программирования держать ноут.
Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
Реклама
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса

Сообщение clawham »

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

вывод...поставьте ЧИСТУЮ винду, поставьте родные драйвера с сайта производителя материнки, поиграйтесь с настройками в биосе, проверьте питание - мож там кабелек длинный и тонких мож предохранитель самовосстанавливающийся устал мож ещё что...да малоли...
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

java писал(а):Не вижу смысла.Винду я сам не ставлю, отдаю знакомому
псц... может стоит начать с обучения установке винды?)
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 512
Зарегистрирован: Вт дек 22, 2009 02:24:50

Сообщение Avarges »

a.garkin писал(а):часы перестают идти...
Можно в обработчик прерывания опрос датчика добавить

cюда
__interrupt void Timer1CompA(void)
{
ES_PlaceEvent(EVENT_SYS_TIMER);
}
Контактная информация:
Открыл глаза
Сообщения: 67
Зарегистрирован: Пн мар 03, 2008 22:12:47

Сообщение vbif87 »

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

int temper; //Переменая для хранения значения температуры
unsigned char lcdBuff[16]; //Массив для хранения фоматированной строки

#pragma rl+
char *str1="найден датчик ds18b20";
char *str2="датчик ds18b20 отсутствует";
#pragma rl-

void main( void )
{
lcd_init( 16 );
lcd_clear( );

if( ds18b20_init( 0, 30, 60, DS18B20_12BIT_RES ) )
//инициализация датчика. Анализ присутствия датчика
//функция возвращает 1 если датчик присутствует на линии
{
lcd_clear( ); lcd_puts( str1 ); delay_ms( 1000 );

while( 1 ){

temper=ds18b20_temperature( 0 );//Чтение температуры, адрес нуль

sprintf( lcdBuff,"t %u\xdfC", temper ); //помещаем форматированую строку в массив
//для вывода значения температуры с точностью до одной сотой, %u заменить на %.3f ( диапазон 0-3 )
//переменную temper нужно записать как float temper;
//выводим на индикатор значение температуры
lcd_clear( ); lcd_gotoxy( 0,0 ); lcd_puts( lcdBuff ); }

}else{ lcd_clear( ); lcd_puts( str2 ); }

}
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город

Сообщение Мастер Ломастер »

vbif87 писал(а): //для вывода значения температуры с точностью до одной сотой, %u заменить на %.3f ( диапазон 0-3 )
//переменную temper нужно записать как float temper;
для одной десятой, соответственно, %5.1f
битва с дураками проиграна, победители торжествуют. слава победителям!
Контактная информация:
Открыл глаза
Сообщения: 67
Зарегистрирован: Пн мар 03, 2008 22:12:47

Сообщение vbif87 »

спасибо. все получилось.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 302
Зарегистрирован: Пн янв 07, 2008 16:56:28
Откуда: Минск

Сообщение levaclaus »

вопрос, как в динамике включить отображение точки?
число 25.5 выводится как 255
Есть массив

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

unsigned char digit_ar[14]      =  {0b11111010,     //0-
                                    0b10000010,     //1-
                                    0b10111001,     //2-
                                    0b10101011,     //3-
                                    0b11000011,     //4-
                                    0b01101011,     //5-
                                    0b01111011,     //6-
                                    0b10100010,     //7-
                                    0b11111011,     //8-
                                    0b11101011,     //9-
                                    0b00000100,     //. -
                                    0b00000000,     // empty
                                    0b00000001,     //-
                                    0b11100001      //значок градуса
                                    };    
****
счас десятые отключены, но без дела пропадает один знакосегмент

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

void main(void)
{
    float znach;
    unsigned char str1[3];
    ds18b20_init(0,0,0,0);
    avr_init();
#asm("sei");   
 while (1)
 {
znach=ds18b20_temperature(0);
itoa((int)znach, str);
str1[0] = '+'; 
strcat(str, str1);
 }; 
}
Открыл глаза
Сообщения: 68
Зарегистрирован: Пн окт 06, 2008 15:51:58
Откуда: Черкассы

Сообщение Rusja2008 »

Смотрю я на Ваш массив для семисегментника и не пойму. Почему при 7ми сегментах в индикаторе Вы используете все восемь битов в байте? По логике: первые 7 бит содержат форму цифры, а оставшийся 8й бит идет под точку. Просто в нужный момент при отображении к выводимому коду присоединяете бит точки (например 0b00000111 - это число 7, поставить точку 0b00000111|(1<<7)).
Не умееш - не берись, но не взявшись не научишся.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 302
Зарегистрирован: Пн янв 07, 2008 16:56:28
Откуда: Минск

Сообщение levaclaus »

у меня точка - 6 бит.
о0
понял, есть к примеру
0b11111011, //8-
надо к нему прибавить
0b00000100

будет 8.

А как это записать?

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

void avr_init(void); 
//Timer 0 interrupt
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
    unsigned char m;
    bit c;
    
    TCNT0  = 0; 

    if (str[SignPlace] == '.') {          //вывести знак "точка"
        m = 10;
        c   = 1;
    };
    if (str[SignPlace] == '+') {          //вывести знак "градус"
        m = 13;
        c   = 1;
    };
    if (str[SignPlace] == '-') {          //вывести знак "минус"
        m = 12; 
        c   = 1;
    };     
    if (str[SignPlace] == ' ') {          //вывести знак "пробел"
        m = 11; 
        c   = 1;
    };

    if (isprint(str[SignPlace]) == 0) {   
       m = 11; 
       c   = 1;
    };
    
    if (c == 0) {
        m   = toint(str[SignPlace]);
    }
                            
    PORTD   = 0;
    PORTB   = 0;
    PORTB   =   digit_ar[m];
    PORTD   =   SPlace_ar[SignPlace];
    
 c = 0;
 SignPlace = SignPlace + 1;
 if (SignPlace == 4) SignPlace = 0;
}  
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город

Сообщение Мастер Ломастер »

почитайте о том, как делать динамическую индикацию на 7-сегментниках, и тогда вопрос "как добавить точку" у вас должен отпасть сам собой.
битва с дураками проиграна, победители торжествуют. слава победителям!
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 302
Зарегистрирован: Пн янв 07, 2008 16:56:28
Откуда: Минск

Сообщение levaclaus »

Мастер Ломастер писал(а):почитайте о том, как делать динамическую индикацию на 7-сегментниках, и тогда вопрос "как добавить точку" у вас должен отпасть сам собой.
замечательно
статья гуд, но как быть с отрицательным числом? разряд то смещается.
есть и
25.5*
5.5*_
-5.5*
-25.5
или сдвигать всё вправо, всёравно не поможет, на двузначном отрицательном числе точка стоит в 3 разряде,
во втором при отрицательном однозначном, в первом при однозначном положительном числе.

Как учесть знак минус, при этом смещается знак градус или вообще не выводится?
и потом

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

 
#define COMMA_CHAR '.'

unsigned char SPlace_ar[4]      = { 0b01000000,
                                    0b00100000, 
                                    0b00010000,
                                    0b00001000};

****
float znach;
****

while (1)
 {
znach=ds18b20_temperature(0)*10;
itoa((int)znach, str);
SPlace_ar[4-1] |=COMMA_CHAR;
 };
ничего не выводтся, на экране мусор
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 302
Зарегистрирован: Пн янв 07, 2008 16:56:28
Откуда: Минск

Сообщение levaclaus »

вообщем сделаем проще

if znach > 9.9
включаем второй сегмент
if znach > 0<10
включаем первый сегмент
if znach <0 >-9.9
включаем второй сегмент
if znach < -10
включаем третий сегмент

А теперь подскажите как эти условия написать?
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город

Сообщение Мастер Ломастер »

levaclaus писал(а):статья гуд, но как быть с отрицательным числом? разряд то смещается.
ититьтвоючерезкоромыслопустымведромпоголове!
как быть? есть 2 варианта:
1. все-таки потратить часть своего драгоценного времени на изучения языка программирования
2. продолжать бомбить форум своими вопросами, делая все на автопилоте.

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

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

massiv[4] - это 4 ваших индикатора.
out() - это функция, которая тупо выводит 3 разряда числа в этот массив "с конца", вроде как было описано в вышеупомянутой статье
temp - ваша температура, которая может быть с минусом
MINUS - макрос, задающий отображение знака минус
COMMA - макрос, задающий свечение точки на индикаторе

if(temp < 0){ // если температура отрицательная,
   out(-temp);  // то выводим ее по модулю и
   massiv[0] = MINUS;  // в первом индикаторе зажигаем минус
} else { // а если положительная,
   out(temp); // то выводим ее, как есть
   massiv[0] = 0;  // и гасим первый индикатор
}
massiv[2] |= COMMA; // а потом тупо добавляем точку к нужному разряду
битва с дураками проиграна, победители торжествуют. слава победителям!
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 302
Зарегистрирован: Пн янв 07, 2008 16:56:28
Откуда: Минск

Сообщение levaclaus »

спасибо за совет
я с вами полностью согласен
Держит паяльник хвостом
Аватара пользователя
Сообщения: 962
Зарегистрирован: Вт янв 04, 2011 13:26:17
Откуда: Лен.Обл.

Сообщение java »

Если есть на русском языке где можно почитать как работать с CodeVision AVR, дайте плиз ссылку.
Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
Ответить

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