Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

MAX6675 + ATmega32A

Непрочитано 17.10.2015, 13:19  
miwutka
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию MAX6675 + ATmega32A

Добрый день. Может кто использовал эту микруху для термопары типа К? Нашел в инете готовые коды но почемуто не работают. Можете глянуть рабочие или нет?
PHP код:
void max6675_select() {
    CLEAR_BIT(PORTB, 4);
    //PORTA=0b11111110; //led diode indication instead of debugger :((
}

void max6675_deselect() {
    SET_BIT(PORTB, 4);
    //PORTA=0b01111111; //led diode indication instead of debugger :((
}

uint8_t send_spi(uint8_t spi_data)
{
    SPDR = spi_data;
    while (!(SPSR & (1‹‹SPIF)));
    return SPDR;
}

void max6675_read_temp()
{
    /* Enable SPI, Master, set clock rate fck/16 */
    SPCR = (1‹‹SPE)|(1‹‹MSTR)|(1‹‹SPR0);
    
    short value = 0;
    //float temp = 0;
    
    uint8_t highByte=0;
    uint8_t lowByte=0;
    
    max6675_select();
    _delay_ms(1000);
    highByte = send_spi(0);
    lowByte = send_spi(0);
    max6675_deselect();
    
    if (lowByte & (1‹‹2)) {
        //LCDGotoXY(0,0);
        //sprintf(text,"TC NOT C");
        //LCDstring(text,8);
        //LCDGotoXY(0,1);
        //sprintf(text,"ONNECTED");
        //LCDstring(text,8);
    } else {
        value = (highByte ‹‹ 5 | lowByte››3);
        temp = (value*0.25);
        t0=temp;
        // Multiply the value by 0.25 to get temp in ˚C
        //LCDGotoXY(0,0);
        //sprintf(text,"TC TEMP:");
        //LCDstring(text,8);
        //LCDGotoXY(0,1);
        //sprintf(text,"%0.8d", temp);
        //LCDstring(text,8);
    }
    
}
в майне пишу

// Port B initialization
// Func7=In Func6=Out Func5=Out Func4=Out Func3=Out Func2=In Func1=In Func0=In
// State7=T State6=0 State5=0 State4=0 State3=0 State2=P State1=P State0=P
PORTB=0x07;
DDRB=0x78;

while (1)
{
max6675_read_temp();

и вывожу на LCD как флоат переменную, но показывает 0.00
} 
где ошибка?....
Реклама:
miwutka вне форума  
Непрочитано 17.10.2015, 14:17  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: MAX6675 + ATmega32A

Ошибка в ДНК. Есть лишняя хромосома.
Тупее АЦП даже придумать трудно. Ничего конфигурировать не надо - просто читай 16 бит и вытаскивай результат. Но увы, и здесь никак без чужой помощи.
Код:
#define ADCBitMask                      0x7FF8
unsigned int GetTempDig (void)
{
  unsigned int res; 
  PIN_OFF(ADC_CS);
  res = SPI_ReadByte(0)‹‹8;
  res|= SPI_ReadByte(0);
  PIN_ON(ADC_CS);
  return ((res&ADCBitMask)››5);
}
Особого внимания заслуживает вот этот шедевр:
Код:
temp = (value*0.25);
При том, что value имеет тип short

Последний раз редактировалось Easyrider83; 17.10.2015 в 14:20.
Easyrider83 вне форума  
Сказали "Спасибо" Easyrider83
miwutka (18.10.2015)
Непрочитано 17.10.2015, 18:27  
miwutka
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: MAX6675 + ATmega32A

взял тупо чужой код от сюда и начал юзать )) http://pastebin.com/aKk58z36

Сейчас Ваш код вставлю себе. Спасибо!
miwutka вне форума  
Непрочитано 17.10.2015, 18:59  
costco
Вид на жительство
 
Регистрация: 24.08.2015
Сообщений: 250
Сказал спасибо: 6
Сказали Спасибо 51 раз(а) в 36 сообщении(ях)
costco на пути к лучшему
По умолчанию Re: MAX6675 + ATmega32A

Надо не тупо копипастить чужой код, а просто прочитать даташит на контроллер и этот ацп. А потом уже можно разобрать что чужой код делает.
А то получается в худших традициях индийской копипасты.
costco вне форума  
Непрочитано 17.10.2015, 19:52  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: MAX6675 + ATmega32A

Сообщение от Easyrider83 Посмотреть сообщение
Особого внимания заслуживает вот этот шедевр:
Код:
temp = (value*0.25);
При том, что value имеет тип short
Дура Студия и не такие какашки заглатывает. Можешь поверить, она честно умножит на 0,25 и результат будет верным.
STM32F0 вне форума  
Непрочитано 17.10.2015, 22:23  
miwutka
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: MAX6675 + ATmega32A

в понедельник проверю на осциле.... чтото всеравно не пашет..... Проверенная библиотека SPI взята....
miwutka вне форума  
Непрочитано 18.10.2015, 00:37  
miwutka
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: MAX6675 + ATmega32A

сделал новый чистый проект - и всё заработало. А вопрос - как сделать чтобы отображало флоат? По даташиту 0.25 точность.
miwutka вне форума  
Непрочитано 18.10.2015, 01:30  
Ara41
Почётный гражданин KAZUS.RUN
 
Регистрация: 30.09.2006
Сообщений: 1,557
Сказал спасибо: 157
Сказали Спасибо 660 раз(а) в 430 сообщении(ях)
Ara41 на пути к лучшему
По умолчанию Re: MAX6675 + ATmega32A

Сообщение от Easyrider83 Посмотреть сообщение
Особого внимания заслуживает вот этот шедевр:
Код:
temp = (value*0.25);
При том, что value имеет тип short
а что не так с этим кодом?
Ara41 вне форума  
Непрочитано 18.10.2015, 13:09  
ForcePoint
Почётный гражданин KAZUS.RUN
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,459
Сказал спасибо: 3,227
Сказали Спасибо 3,513 раз(а) в 2,394 сообщении(ях)
ForcePoint на пути к лучшему
Стрелка Re: MAX6675 + ATmega32A

Сообщение от Ara41 Посмотреть сообщение
а что не так с этим кодом?
Если 0.25 это действительно константа, то надо записать
Код:
temp = value ›› 4;   // Multiply the value by 0.25 to get temp in ˚C
Тем самым мы освободим компилятор от вычисления произведения (или даже от ещё более "тяжёлого" вычисления частного при записи temp = value/4).
ForcePoint вне форума  
Непрочитано 18.10.2015, 13:31  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: MAX6675 + ATmega32A

Сообщение от ForcePoint Посмотреть сообщение
Если 0.25 это действительно константа, то надо записать
Код:
temp = value ›› 4;   // Multiply the value by 0.25 to get temp in ˚C
Тем самым мы освободим компилятор от вычисления произведения (или даже от ещё более "тяжёлого" вычисления частного при записи temp = value/4).
Жесть! Никаких противоречий? Может ошибка где?
temp = value ›› 4;
Это на сколько там деление получится?
STM32F0 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
странное поведение АЦП на ATmega32A vitmailru AVR 11 12.06.2013 17:56
Определить напряжение на входе в ATmega32A relec Песочница (вопросы новичков) 2 26.11.2012 13:10
ATmega32A входной аналоговый сигнал relec Песочница (вопросы новичков) 2 11.11.2012 14:31
ШИМ на ATmega32A relec AVR 3 09.10.2012 00:24
Помогите запустить MAX6675!!! woroba Микроконтроллеры, АЦП, память и т.д 1 03.07.2007 17:05


Часовой пояс GMT +4, время: 01:46.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.