| AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
MAX6675 + ATmega32A
17.10.2015, 13:19
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
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
}
|
где ошибка?....
|
|
|
|
17.10.2015, 14:17
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
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
|
|
|
17.10.2015, 18:27
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: MAX6675 + ATmega32A
взял тупо чужой код от сюда и начал юзать )) http://pastebin.com/aKk58z36
Сейчас Ваш код вставлю себе. Спасибо!
|
|
|
|
17.10.2015, 18:59
|
|
|
Вид на жительство
Регистрация: 24.08.2015
Сообщений: 250
Сказал спасибо: 6
Сказали Спасибо 51 раз(а) в 36 сообщении(ях)
|
Re: MAX6675 + ATmega32A
Надо не тупо копипастить чужой код, а просто прочитать даташит на контроллер и этот ацп. А потом уже можно разобрать что чужой код делает.
А то получается в худших традициях индийской копипасты.
|
|
|
|
17.10.2015, 19:52
|
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: MAX6675 + ATmega32A
Сообщение от Easyrider83
|
Особого внимания заслуживает вот этот шедевр:
|
Код:
|
temp = (value*0.25); |
При том, что value имеет тип short
|
Дура Студия и не такие какашки заглатывает. Можешь поверить, она честно умножит на 0,25 и результат будет верным.
|
|
|
|
17.10.2015, 22:23
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: MAX6675 + ATmega32A
в понедельник проверю на осциле.... чтото всеравно не пашет..... Проверенная библиотека SPI взята....
|
|
|
|
18.10.2015, 00:37
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: MAX6675 + ATmega32A
сделал новый чистый проект - и всё заработало. А вопрос - как сделать чтобы отображало флоат? По даташиту 0.25 точность.
|
|
|
|
18.10.2015, 01:30
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 30.09.2006
Сообщений: 1,557
Сказал спасибо: 157
Сказали Спасибо 660 раз(а) в 430 сообщении(ях)
|
Re: MAX6675 + ATmega32A
Сообщение от Easyrider83
|
Особого внимания заслуживает вот этот шедевр:
|
Код:
|
temp = (value*0.25); |
При том, что value имеет тип short
|
а что не так с этим кодом?
|
|
|
|
18.10.2015, 13:09
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,459
Сказал спасибо: 3,227
Сказали Спасибо 3,513 раз(а) в 2,394 сообщении(ях)
|
Re: MAX6675 + ATmega32A
Сообщение от Ara41
|
|
а что не так с этим кодом?
|
Если 0.25 это действительно константа, то надо записать
|
Код:
|
temp = value ›› 4; // Multiply the value by 0.25 to get temp in ˚C |
Тем самым мы освободим компилятор от вычисления произведения (или даже от ещё более "тяжёлого" вычисления частного при записи temp = value/4).
|
|
|
|
18.10.2015, 13:31
|
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
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;
Это на сколько там деление получится?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:46.
|
|