Перейти к содержанию

Изменением Прошивки С Катода На Анодный 7Ceg


Khabl

Рекомендуемые сообщения

В протеусе проверяете?

Только что проверил - все нормально отображается при компилировании.

Молодых и талантливых чрезвычайно много. Целеустремлённых и готовых довести дело до конца — гораздо меньше.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Установил CVAVR... пытаюсь побороть аллергию к нему, которая появилась после первой его установки, пару лет назад .....

Так вот, совершенно ничего не меняю в исходном тексте (оригинал скачанный из статейки)... компилирую... а он мне показывает значения совершенно не те, что заданы на датчиках :crazy:

Например у меня задано 55,5 и 11,1 а на дисплее - в начале вообще чихарда из непонятных цифр а потом попеременно 12,5 и 2,1.........

Автор издевается... (хотя откомпиленный им файл - работает нормально)

Ща предложу тебе свой вариант :new_russian:

Криво сударь компилируете :crazy:

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Ммм... а что может быть не так при компиляции ?.....

Вроде открыл готовый проект... ничего не менял... ???

Проверяю в проте...

Изменено пользователем shads
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

В свойствах CVAVR есть опции оптимизации кода , и т.д.

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Во блин... и что при разной оптимизации он может так косячить!?.....

Еще раз убеждаюсь, что я сразу правильный выбор сделал, присев на AVRStudio...

Хотя... может у меня версия старенькая... 1.25.7

Изменено пользователем shads
Ссылка на комментарий
Поделиться на другие сайты

У меня из-под коробки все нормально отображает

Молодых и талантливых чрезвычайно много. Целеустремлённых и готовых довести дело до конца — гораздо меньше.

Ссылка на комментарий
Поделиться на другие сайты

Во блин... и что при разной оптимизации он может так косячить!?.....

Еще раз убеждаюсь, что я сразу правильный выбор сделал, присев на AVRStudio...

Хотя... может у меня версия старенькая... 1.25.7

Поставьте версию 2.04 или выше. От версии сильно зависит.

Я в кодвижене часто код ваяю.

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

И я-бы на Вашем месте код с нуля переписал , и в той среде , в которой удобно работать :)

Вот: http://rutracker.org/forum/viewtopic.php?t=4159042

Первая ссылка в поиске светится.

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Дык я уже и хотел с нуля... (вернее хотел свое поправить http://asis-kbr.ru/f....php?f=11&t=126 )

Вот досадно... я торрентами не пользуюсь...

А как то по другому не вариант его высосать :)...

Изменено пользователем shads
Ссылка на комментарий
Поделиться на другие сайты

Оригинальная разводка убогая и соответственно код из-за нее убогий. Зачем было распихивать пины сегментов на разные порты? UPD: Посмотрел плату из статьи - оригинально, конечно, но не всегда удобно.

Изменено пользователем IIIytNIK

Молодых и талантливых чрезвычайно много. Целеустремлённых и готовых довести дело до конца — гораздо меньше.

Ссылка на комментарий
Поделиться на другие сайты

Спасибочки!!!

Оригинальная разводка убогая и соответственно код из-за нее убогий. Зачем было распихивать пины сегментов на разные порты?
Ну... если бы всегда все хотелось и моглось :)... а тут же МИНИ! т.е. чем то надо жертвовать...
Ссылка на комментарий
Поделиться на другие сайты

Вот досадно... я торрентами не пользуюсь...

А как то по другому не вариант его высосать :)...

Насмешили! Держите благодарку :)

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Во..... пошла вода по трубам :)...

Оказывается у меня компиль древний был..

А этот, 2.05 мне даже понравился.....

Ща мы его... этого термометра то... и победим :) .....

Хе..... во дела...

По ходу Khabl чего то накосячил...

Я поменял тот фрагмент о котором изначально говорил, и все чудненько пашет на анодном дисплее...

Походу, у него дисплей все таки катодный, а он голову морочит и себе и другим :) думая что это анодный... :crazy:

Иле же другой вариант (если все таки индикатор анодный)... как то он умудряется залить в контроллер старую (катодную) прошивку...

Вот если что анодный вариант кекса

mini-term.7z

Изменено пользователем shads
Ссылка на комментарий
Поделиться на другие сайты

Катодный бы вообще не пахал. Где-то он скорее всего забыл инвертировать "~".

Ну и для нуждающихся исправленный исходник:

/*****************************************************
This program was produced by the
CodeWizardAVR V2.04.4a Advanced

Project : Мини термометр
Version :
Date    : 24.04.2010
Author  : Pervakov Danil

Chip type			   : ATtiny2313
AVR Core Clock frequency: 4,000000 MHz
Memory model		    : Tiny
External RAM size	   : 0
Data Stack size		 : 32
*****************************************************/
//
// Fuse CKSEL = 0010, SUT = 10 (Int.RC 4 MHz)
//
// EEPROM usage: 0 byte(s), 0,0% of EEPROM
// Program size: 829 words (1658 bytes), 81,0% of FLASH
//
// Датчики DS18S20 и/или DS18B20 - (PORTD bit 6)
//

// сердце - не Пентиум и не Атлон и частота не в ГГц, но если вспомнить IBM PC XT с его Intel 8088
#include <tiny2313.h>

// 1 Wire Bus functions
#asm
  .equ __w1_port=0x12 ;PORTD
  .equ __w1_bit=6
#endasm

// DS18x20 Temperature Sensor functions
#include "ds18x20_v2.h"  

#include <delay.h>
#include <bcd.h>

//---------------------------------------
#define A   2
#define B  32
#define C   4
#define D  64  
#define E 128
#define F   1
#define G   1

static flash unsigned char digits_PA[] = {
   (A+F), // 0
   (0),   // 1
   (A),   // 2
   (A),   // 3
   (F),   // 4
   (A+F), // 5
   (A+F), // 6
   (A),   // 7
   (A+F), // 8
   (A+F), // 9
   (A+F), // A - 10
   (F),   // b - 11
   (A+F), // C - 12
   (0),   // d - 13
   (A+F), // E - 14
   (A+F), // F - 15
   (0),   // 16 - знак минус
   (A+F), // 17 - символ градус цельсия
   (0)    // 18 - пусто
};

static flash unsigned char digits_PB[] = {
   (B+C+D+E),   // 0
   (B+C),	   // 1
   (B+D+E+G),   // 2
   (B+C+D+G),   // 3
   (B+C+G),	 // 4
   (C+D+G),	 // 5
   (C+D+E+G),   // 6
   (B+C),	   // 7
   (B+C+D+E+G), // 8
   (B+C+D+G),   // 9
   (B+C+E+G),   // A - 10
   (C+D+E+G),   // b - 11
   (D+E),	   // C - 12
   (B+C+D+E+G), // d - 13
   (D+E+G),	 // E - 14
   (E+G),	   // F - 15
   (G),		 // 16 - знак минус
   (B+G),	   // 17 - символ градус цельсия
   (0)		  // 18 - пусто
};

#define MINUS  16
#define GRADUS 17
#define PROBEL 18
#define SYMBOL_F 15

// K1 - PORTD.0-1, K2 - PORTD.2-3, K3 - PORTD.4-5
static flash unsigned char cursor[]={0b11111100, 0b11110011, 0b11001111};

unsigned char digit_out[3], cur_dig;
bit zpt_ON;
int temperature;	   // то, что возвращает датчик


// maximum number of DS1820/DS18S20/DS18B20 devices connected to the 1 Wire bus
#define MAX_DS18x20 4

// DS1820/DS18S20/DS18B20 devices ROM code storage area, 9 bytes are used for each device
unsigned char rom_code[MAX_DS18x20][9];


// ----------------------------------------------------------------------------
//
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void) {
   //TCNT0=0xE6;// Reinitialize Timer 0 value

   PORTD&=0b11000000;    // потушить все (биты всех знакомест "1" - для Общ.кат.)

   PORTA=~digits_PA[digit_out[cur_dig]]; // символ на экран
   PORTB=~digits_PB[digit_out[cur_dig]];

   if ((zpt_ON == 1) && (cur_dig == 1)) PORTB.4=0;  // запятая во втором разряде (нумерация нач. с нуля)	    

   PORTD |= ~(cursor[cur_dig]);  // засветить нужный бит (бит знакоместа в "0" - для Общ.кат.)

   cur_dig++; if (cur_dig > 2) cur_dig=0;
}



// ----------------------------------------------------------------------------
void view_term(void) {
   unsigned char celie, drob, tmp;
   unsigned int temp, celie_tmp, drob_tmp;


   temp = (unsigned int) temperature;

   if (temperature>=0) {
       digit_out[0]=PROBEL;	   // первый символ (сотни) пустой
   } else {	    
       temp = ( ~temp ) + 0x0001; // если число отрицательное перевести его в норм.вид
       digit_out[0]=MINUS;	    // и высветить знак минус (в дальнейшем атрибут отр.темп.)
        };
   //digit_out[3]=GRADUS;
   zpt_ON=1;

   celie_tmp = temp >> 4;			  // целая часть числа
   drob_tmp  = temp & 0x000F;		  // дробная часть числа с точностью 1/16 градуса

   drob  = (unsigned char) ((drob_tmp * 10) / 16); // преобразование дробной части в формате "1/16 градуса" в десятичный формат с точностью 0,1 градуса

   celie = (unsigned char) celie_tmp;  // я люблю явное преведение типов

   if (celie >= 100) {tmp=bin2bcd(celie-100); digit_out[0] = 1; } else { tmp=bin2bcd(celie); }   // вычислить целую часть

   if ((celie >= 100) || ((digit_out[0] == MINUS) && (celie >= 10))) { //  если больше 100,0 гр. или если темп. меньше -10 точность 1 гр.
       zpt_ON=0;
       digit_out[1] = tmp >> 4;    // десятки
       digit_out[2] = tmp & 0x0F;  // единицы
   }

   if ((digit_out[0] == MINUS) && (celie < 10)) { // если темп.меньше 0 и больше -10 точность 0,1 гр.
       digit_out[1] = celie; // единицы
       digit_out[2] = drob;  // дробная часть
   }

   if ((digit_out[0] == PROBEL) && (celie < 100)) { // если темп. меньше 100,0 гр и больше 0 гр точность 0,1 гр.
       if (tmp >> 4) digit_out[0] = tmp >> 4; // десятки - если десятков нет то и не показывать
       digit_out[1] = tmp & 0x0F;			 // единицы
       digit_out[2] = drob;				   // дробная часть
   }
}  // -------------------------------------------------------------------------





//================================== main =====================================
void main(void) {
unsigned char i, ds18x20_devices;

// Input/Output Ports initialization
// Port A initialization
PORTA=0x00; // State2=T State1=0 State0=0
DDRA=0x03;  // Func2=In Func1=Out Func0=Out

// Port B initialization
PORTB=0x00; // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
DDRB=0xFF; // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// Port D initialization
PORTD=0x3F;// State6=T State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
DDRD=0xFF; // Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

/*
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3,906 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x05;
TCNT0=0xE6;
OCR0A=0x00;
OCR0B=0x00;
*/

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 62,500 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x03;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;


// Timer/Counter 1 initialization
// Clock value: Timer1 Stopped
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// External Interrupt(s) initialization
// INT0, INT1, Interrupt on any change on pins PCINT0-7: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x02;

// Universal Serial Interface initialization
// Mode: Disabled
USICR=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;

// 1 Wire Bus initialization
w1_init();

// Determine the number of DS18x20 devices connected to the 1 Wire bus
ds18x20_devices=w1_search(0xf0,rom_code);

// Global enable interrupts
#asm("sei")

// высветить на индикаторе F 'кол-во найденых устройств'
digit_out[0]=SYMBOL_F;
digit_out[1]=PROBEL;
digit_out[2]=ds18x20_devices;

// т.к. при первом чтении датчиков считывается мусор
// первое чтение датчиков делаем в холостую
if (ds18x20_devices >= 1) {
   for (i=0;i<ds18x20_devices;i++) {
//        if (rom_code[i][0] == DS18B20_FAMILY_CODE){
//            temperature=ds18b20_temperature(&rom_code[i][0]);
//        }
       if (rom_code[i][0] == DS18S20_FAMILY_CODE){
           temperature=ds18s20_temperature(&rom_code[i][0]);
       }
       delay_ms(1000);
   }
} else {
   delay_ms(2000);
}


// -------------------------------- рабочая часть -----------------------------------
while (1) {

    if (ds18x20_devices >= 1) {  // если обнаружено больше одного датчика

		    for (i=0;i<ds18x20_devices;) {
				    if (rom_code[i][0] == DS18B20_FAMILY_CODE){
						 temperature=ds18b20_temperature(&rom_code[i][0]);
				    }
				    if (rom_code[i][0] == DS18S20_FAMILY_CODE){
						 temperature=ds18s20_temperature(&rom_code[i][0]);
				    }
				    if (temperature!=-9999) view_term();

				    delay_ms(2000);
				    i++;
		    }
    }
};// ----------------------------- рабочая часть (end) -----------------------------------



} // =================================== end main =========================================




//
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= The End -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
//

Молодых и талантливых чрезвычайно много. Целеустремлённых и готовых довести дело до конца — гораздо меньше.

Ссылка на комментарий
Поделиться на другие сайты

Во..... пошла вода по трубам :)...

Оказывается у меня компиль древний был..

А этот, 2.05 мне даже понравился.....

Ща мы его... этого термометра то... и победим :) .....

Хе..... во дела...

По ходу Khabl чего то накосячил...

Я поменял тот фрагмент о котором изначально говорил, и все чудненько пашет на анодном дисплее...

Походу, у него дисплей все таки катодный, а он голову морочит и себе и другим :) думая что это анодный... :crazy:

Иле же другой вариант (если все таки индикатор анодный)... как то он умудряется залить в контроллер старую (катодную) прошивку...

Вот если что анодный вариант кекса

Я вообще, более менее серьёзные проекты пишу сразу под два типа индикаторов, а потом программно или джампером переключаюсь с катода на анод и наоборот. :)

И тогда не потребуется мучиться.

Вот к примеру тут : http://forum.cxem.ne...40#comment-1749223

так реализовано.

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Во..... пошла вода по трубам :)...

Оказывается у меня компиль древний был..

А этот, 2.05 мне даже понравился.....

Ща мы его... этого термометра то... и победим :) .....

Хе..... во дела...

По ходу Khabl чего то накосячил...

Я поменял тот фрагмент о котором изначально говорил, и все чудненько пашет на анодном дисплее...

Походу, у него дисплей все таки катодный, а он голову морочит и себе и другим :) думая что это анодный... :crazy:

Иле же другой вариант (если все таки индикатор анодный)... как то он умудряется залить в контроллер старую (катодную) прошивку...

Вот если что анодный вариант кекса

Индикатор правильный ba56-12gwa. Скорей всего дело не в прошивке , а в программе cvavr v2.03 при компиляции .
Ссылка на комментарий
Поделиться на другие сайты

Во..... пошла вода по трубам :)...

Оказывается у меня компиль древний был..

А этот, 2.05 мне даже понравился.....

Ща мы его... этого термометра то... и победим :) .....

Хе..... во дела...

По ходу Khabl чего то накосячил...

Я поменял тот фрагмент о котором изначально говорил, и все чудненько пашет на анодном дисплее...

Походу, у него дисплей все таки катодный, а он голову морочит и себе и другим :) думая что это анодный... :crazy:

Иле же другой вариант (если все таки индикатор анодный)... как то он умудряется залить в контроллер старую (катодную) прошивку...

Вот если что анодный вариант кекса

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

Ссылка на комментарий
Поделиться на другие сайты

Прошивка конечно работает ,но проблема в другом .

После включения показание 26 .0 как и по простому градуснику,а

дальше показание увеличиваеться 0.1 .

В течение 10минут доходит до 36.0

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

Изменено пользователем Khabl
Ссылка на комментарий
Поделиться на другие сайты

проблема в другом .

В течение 10минут доходит до 36.0

Вооо..... знакомая проблема... я в свое время тоже мозги поломал... http://radiokot.ru/forum/viewtopic.php?p=1243687#p1243687
И тинька греется ,наверное добавочные резисторы исправят эту проблемку

Да, без резисторов помоему это издевательство над контроллером... Если только напряжение питания подобрать, чтобы индикатор не жрал току как лошадь, то можно еще без резисторов...

А ты сколько питание подаеш?

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

tiny2313_thermometer_mini_2x.7z

Ссылка на комментарий
Поделиться на другие сайты

Прошивка конечно работает ,но проблема в другом .

После включения показание 26 .0 как и по простому градуснику,а

дальше показание увеличиваеться 0.1 .

В течение 10минут доходит до 36.0

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

3.3v два дачика и показание не увеличивается

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...