Teplotní čidlo TMP100 a CodeVision AVR - help – Mikrokontroléry – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Teplotní čidlo TMP100 a CodeVision AVR - help – Mikrokontroléry – Fórum – Programujte.comTeplotní čidlo TMP100 a CodeVision AVR - help – Mikrokontroléry – Fórum – Programujte.com

 

Opteron
~ Anonymní uživatel
1 příspěvek
1. 11. 2010   #1
-
0
-

Zdravím kolegové,
začínám s AVR v CodeVision a snažím se rozchodit teplotní čidlo TMP100 od texas instruments komunikující pomocí I2C. Čidlo je připojeno na ATmega32, ke které je připojen LCD displej a na I2C sběrnici společně s čidlem ještě EEPROM 24LC16. V EEPROM jsou uložené znaky abecedy, které se vypisují na LCD (slouží to pouze pro ověření že I2C sběrnice komunikuje). Problém je ale když chci komunikovat s čidlem, nějak z toho nemůžu dostat tu hodnotu teploty na LCD (teplota se musí podle datasheetu přepočítat ale to zatím není třeba, nejde mi vytáhnout to binární slovo a nějak jej zobrazit na LCD). Přikládám tedy ještě zdroják, snad si s tím někdo bude vědět rady, já totiž nevím jestli číslo, které posílám na LCD není moc vysoké a proto se na LCD zobrazuje celý znak 8x5bodů nebo jestli to I2C vůbec nefunguje. Nevím jak to převést aby to na tom LCD zobrazovalo převedenou binární hodnotu do desítkového čísla, příkaz lcd_putchar(); mi bere pouze bin a pomocí funkce itoa to převést zase nejde.


/*****************************************************
This program was produced by the
CodeWizardAVR V2.04.4a Advanced
Automatic Program Generator
© Copyright 1998-2009 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 1.11.2010
Author : NeVaDa
Company :
Comments:


Chip type : ATmega32
Program type : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 512
*****************************************************/

#include <mega32.h>
#include <delay.h>
#include <stdlib.h>
#include <bcd.h>
// I2C Bus functions
#asm
.equ __i2c_port=0x1B ;PORTA
.equ __sda_bit=7
.equ __scl_bit=0
#endasm
#include <i2c.h>
unsigned char d;
unsigned char t1;
unsigned char t2;
int i;
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

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

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

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

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// I2C Bus initialization
i2c_init();

// LCD module initialization
lcd_init(20);
lcd_gotoxy(0,0);
for(i=0;i<32;i++)\\Výpis dat z EEPROM na LCD (funguje)
{
i2c_init();
i2c_start();
i2c_write(0xA0);
i2c_write(i);
i2c_start();
i2c_write(0xA1);
d=i2c_read(0);
i2c_stop();
lcd_putchar(d);


};
while (1)
{

i2c_init();
i2c_start();
i2c_write(0x9C); \\Adresa čidla je 9C pro zápis
i2c_write(0x00); \\Výběr registru s hodnotou teploty
i2c_write(0x9D); \\Adresa čipu pro čtení (9D)
t1=i2c_read(0); \\Uložení MSB slova
t2=i2c_read(0); \\Uložení LSB slova
i2c_stop();

lcd_gotoxy(15,2);
lcd_putchar(t1); \\Zde se rozsvítí celý znak
lcd_gotoxy(15,3);
lcd_putchar(t2); \\Zde se rozsvítí celý znak
lcd_gotoxy(0,3);
lcd_puts("Teplota:");
delay_ms(100);
// Place your code here

};
}


Díky za rady

Nahlásit jako SPAM
IP: 81.19.5.–
AB
~ Anonymní uživatel
41 příspěvků
2. 11. 2010   #2
-
0
-

    i2c_init();

i2c_start();
i2c_write(0x9C); \\Adresa čidla je 9C pro zápis
i2c_write(0x00); \\Výběr registru s hodnotou teploty
i2c_write(0x9D); \\Adresa čipu pro čtení (9D)
t1=i2c_read(0); \\Uložení MSB slova
t2=i2c_read(0); \\Uložení LSB slova
i2c_stop();

Myslím že má být
    i2c_init();

i2c_start();
i2c_write(0x9C); \\Adresa čidla je 9C pro zápis
i2c_write(0x00); \\Výběr registru s hodnotou teploty
i2c_start();
i2c_write(0x9D); \\Adresa čipu pro čtení (9D)
t1=i2c_read(1); \\Uložení MSB slova ACK
t2=i2c_read(0); \\Uložení LSB slova NACK
i2c_stop();

Pak oba bajty sloučit do wordu, pomocí itoa() převést na string a zobrazit.

Nahlásit jako SPAM
IP: 217.115.249.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý