termostat displej na pind
Napsal: 17 srp 2014, 21:38
Dobrí večer stále riešim môj termostat a ,už ho skoro mám LCD som napojil podla schémy http://svetelektro.com/clanky/programuj ... t-459.html potom som upravil program na voltmeter http://svetelektro.com/clanky/programuj ... t-472.html a stále ukazovalo 500C°.pretože prevodník je na pinc toto je ten program:
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <stdio.h>
#include "lcd.h"
#include "lcd.c"
#define LCD_LINES 2
#define LCD_DISP_LENGTH 16
#define LCD_LINE_LENGTH 0x40
#define LCD_START_LINE1 0x00
#define LCD_START_LINE2 0x40
#define LCD_START_LINE3 0x14
#define LCD_START_LINE4 0x54
#define LCD_WRAP_LINES 0
#define LCD_PORT PORTD
#define LCD_DATA0_PORT LCD_PORT
#define LCD_DATA1_PORT LCD_PORT
#define LCD_DATA2_PORT LCD_PORT
#define LCD_DATA3_PORT LCD_PORT
#define LCD_DATA0_PIN 3
#define LCD_DATA1_PIN 2
#define LCD_DATA2_PIN 1
#define LCD_DATA3_PIN 0
#define LCD_RS_PORT PORTD
#define LCD_RS_PIN 5
#define LCD_E_PORT PORTD
#define LCD_E_PIN 4
unsigned int Read_ADC(unsigned char channel){
// vloz cislo kanala, vymaskuj nepouzite bity
ADMUX &= 0xF0;
ADMUX |= channel & 0x0F;
// start conversion
ADCSRA |= (1 << ADSC);
// cakaj na priznak skoncenia konverzie
while(!(ADCSRA & (1<<ADIF)));
// navratova hodnota - vysledok ad prevodu
return ADC;
}
int main(){
char text[32];
unsigned int T,adc;
ADMUX |= (1 << REFS0); //referencia 5V
// povolenie AD prevodnika, Interrupt flag, preddelicka 128 pri frekvencii hodin 8MHz
ADCSRA |= (1 << ADEN) | (1 << ADIF) | (1 <<ADPS2) | (1 <<ADPS1) | (1 <<ADPS0);
sei(); // povol globalne prerusenia
lcd_init(LCD_DISP_ON);
while(1){
adc = Read_ADC(0);
// vypocet napatia v mV
T = ((long)adc*5000/1024/10);
sprintf(text,"Teplota: \n%dC*",T);
lcd_clrscr();
lcd_gotoxy(0,0);
lcd_puts(text);
_delay_ms(500);
}
}
pri tamtom programe Na displeji mi ukazuje PPPPPPPPPPPPPPPP
PPPPPPPPPPPPPPPP
pri programe:
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <stdio.h>
#include "lcd.h"
#include "lcd.c"
unsigned int Read_ADC(unsigned char channel){
// vloz cislo kanala, vymaskuj nepouzite bity
ADMUX &= 0xF0;
ADMUX |= channel & 0x0F;
// start conversion
ADCSRA |= (1 << ADSC);
// cakaj na priznak skoncenia konverzie
while(!(ADCSRA & (1<<ADIF)));
// navratova hodnota - vysledok ad prevodu
return ADC;
}
int main(){
char text[32];
unsigned int T,adc;
ADMUX |= (1 << REFS0); //referencia 5V
// povolenie AD prevodnika, Interrupt flag, preddelicka 128 pri frekvencii hodin 8MHz
ADCSRA |= (1 << ADEN) | (1 << ADIF) | (1 <<ADPS2) | (1 <<ADPS1) | (1 <<ADPS0);
sei(); // povol globalne prerusenia
lcd_init(LCD_DISP_ON);
while(1){
adc = Read_ADC(0);
// vypocet napatia v mV
T = ((long)adc*5000/1024/10);
sprintf(text,"Teplota: \n%dC*",T);
lcd_clrscr();
lcd_gotoxy(0,0);
lcd_puts(text);
_delay_ms(500);
}
}
to ide ale nemôžem napojit čidlo a stále ukazuje 499c° ,lebo do pc0 nejde čidlo ale DB7 prosím o radu čo mám zle??
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <stdio.h>
#include "lcd.h"
#include "lcd.c"
#define LCD_LINES 2
#define LCD_DISP_LENGTH 16
#define LCD_LINE_LENGTH 0x40
#define LCD_START_LINE1 0x00
#define LCD_START_LINE2 0x40
#define LCD_START_LINE3 0x14
#define LCD_START_LINE4 0x54
#define LCD_WRAP_LINES 0
#define LCD_PORT PORTD
#define LCD_DATA0_PORT LCD_PORT
#define LCD_DATA1_PORT LCD_PORT
#define LCD_DATA2_PORT LCD_PORT
#define LCD_DATA3_PORT LCD_PORT
#define LCD_DATA0_PIN 3
#define LCD_DATA1_PIN 2
#define LCD_DATA2_PIN 1
#define LCD_DATA3_PIN 0
#define LCD_RS_PORT PORTD
#define LCD_RS_PIN 5
#define LCD_E_PORT PORTD
#define LCD_E_PIN 4
unsigned int Read_ADC(unsigned char channel){
// vloz cislo kanala, vymaskuj nepouzite bity
ADMUX &= 0xF0;
ADMUX |= channel & 0x0F;
// start conversion
ADCSRA |= (1 << ADSC);
// cakaj na priznak skoncenia konverzie
while(!(ADCSRA & (1<<ADIF)));
// navratova hodnota - vysledok ad prevodu
return ADC;
}
int main(){
char text[32];
unsigned int T,adc;
ADMUX |= (1 << REFS0); //referencia 5V
// povolenie AD prevodnika, Interrupt flag, preddelicka 128 pri frekvencii hodin 8MHz
ADCSRA |= (1 << ADEN) | (1 << ADIF) | (1 <<ADPS2) | (1 <<ADPS1) | (1 <<ADPS0);
sei(); // povol globalne prerusenia
lcd_init(LCD_DISP_ON);
while(1){
adc = Read_ADC(0);
// vypocet napatia v mV
T = ((long)adc*5000/1024/10);
sprintf(text,"Teplota: \n%dC*",T);
lcd_clrscr();
lcd_gotoxy(0,0);
lcd_puts(text);
_delay_ms(500);
}
}
pri tamtom programe Na displeji mi ukazuje PPPPPPPPPPPPPPPP
PPPPPPPPPPPPPPPP
pri programe:
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <stdio.h>
#include "lcd.h"
#include "lcd.c"
unsigned int Read_ADC(unsigned char channel){
// vloz cislo kanala, vymaskuj nepouzite bity
ADMUX &= 0xF0;
ADMUX |= channel & 0x0F;
// start conversion
ADCSRA |= (1 << ADSC);
// cakaj na priznak skoncenia konverzie
while(!(ADCSRA & (1<<ADIF)));
// navratova hodnota - vysledok ad prevodu
return ADC;
}
int main(){
char text[32];
unsigned int T,adc;
ADMUX |= (1 << REFS0); //referencia 5V
// povolenie AD prevodnika, Interrupt flag, preddelicka 128 pri frekvencii hodin 8MHz
ADCSRA |= (1 << ADEN) | (1 << ADIF) | (1 <<ADPS2) | (1 <<ADPS1) | (1 <<ADPS0);
sei(); // povol globalne prerusenia
lcd_init(LCD_DISP_ON);
while(1){
adc = Read_ADC(0);
// vypocet napatia v mV
T = ((long)adc*5000/1024/10);
sprintf(text,"Teplota: \n%dC*",T);
lcd_clrscr();
lcd_gotoxy(0,0);
lcd_puts(text);
_delay_ms(500);
}
}
to ide ale nemôžem napojit čidlo a stále ukazuje 499c° ,lebo do pc0 nejde čidlo ale DB7 prosím o radu čo mám zle??

