termostat displej na pind
Moderátor: Moderátoři
- SimonHosa
- Příspěvky: 107
- Registrován: 22 črc 2014, 00:00
- Bydliště: Spišský Štiavnik
- Kontaktovat uživatele:
termostat displej na pind
#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??
Samotný výpis na displej ti funguje?
Kód: Vybrat vše
int main() {
char text[32];
unsigned int T,adc;
lcd_init(LCD_DISP_ON);
T = 111;
sprintf(text,"Teplota: %dC",T);
lcd_clrscr();
lcd_gotoxy(0,0);
lcd_puts(text);
while(1)
{};
}
to ide ale nemôžem napojit čidlo a stále ukazuje 499c° ,lebo do pc0 nejde čidlo ale DB7
Jestli se řídíš tímto schematem, tak tomu nerozumím. Tam je displej připojen na PORTD. Podle toho musíš upravit i soubor lcd.h takto:
Kód: Vybrat vše
#define LCD_PORT PORTD /**< port for the LCD lines */
#define LCD_DATA0_PORT LCD_PORT /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT LCD_PORT /**< port for 4bit data bit 1 */
#define LCD_DATA2_PORT LCD_PORT /**< port for 4bit data bit 2 */
#define LCD_DATA3_PORT LCD_PORT /**< port for 4bit data bit 3 */
#define LCD_DATA0_PIN 2 /**< pin for 4bit data bit 0 */
#define LCD_DATA1_PIN 3 /**< pin for 4bit data bit 1 */
#define LCD_DATA2_PIN 4 /**< pin for 4bit data bit 2 */
#define LCD_DATA3_PIN 5 /**< pin for 4bit data bit 3 */
#define LCD_RS_PORT PORTD /**< port for RS line */
#define LCD_RS_PIN 0 /**< pin for RS line */
#define LCD_E_PORT PORTD /**< port for Enable line */
#define LCD_E_PIN 1 /**< pin for Enable line */
- SimonHosa
- Příspěvky: 107
- Registrován: 22 črc 2014, 00:00
- Bydliště: Spišský Štiavnik
- Kontaktovat uživatele:
- SimonHosa
- Příspěvky: 107
- Registrován: 22 črc 2014, 00:00
- Bydliště: Spišský Štiavnik
- Kontaktovat uživatele:
#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_PORT PORTD /**< port for the LCD lines */
#define LCD_DATA0_PORT LCD_PORT /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT LCD_PORT /**< port for 4bit data bit 1 */
#define LCD_DATA2_PORT LCD_PORT /**< port for 4bit data bit 2 */
#define LCD_DATA3_PORT LCD_PORT /**< port for 4bit data bit 3 */
#define LCD_DATA0_PIN 2 /**< pin for 4bit data bit 0 */
#define LCD_DATA1_PIN 3 /**< pin for 4bit data bit 1 */
#define LCD_DATA2_PIN 4 /**< pin for 4bit data bit 2 */
#define LCD_DATA3_PIN 5 /**< pin for 4bit data bit 3 */
#define LCD_RS_PORT PORTD /**< port for RS line */
#define LCD_RS_PIN 0 /**< pin for RS line */
#define LCD_E_PORT PORTD /**< port for Enable line */
#define LCD_E_PIN 1 /**< pin for Enable line */
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);
}
}
A stále ukazuje na pinc
SCHÉMA:

Kód: Vybrat vše
#include "lcd.h"tak se konstanty LCD_xxx definují dle souboru lcd.h. A další definici překladač ignoruje s varováním, že takové konstanty jsou již definovány. Proto jsem ti psal
musíš upravit i soubor lcd.h
A ještě doplním, kvůli tomu soubory *.h existují. Pro každý projekt máš dle zapojení různý lcd.h, ale jenom jeden společný lcd.c.
