Hallo,
ich weiß der Thread ist schon sehr alt.
Habe deinen code für mein Projekt übernommen, dazu ne frage, gibt es eine Möglichkeit auch die Kommastelle anzuzeigen?
Hallo,
ich weiß der Thread ist schon sehr alt.
Habe deinen code für mein Projekt übernommen, dazu ne frage, gibt es eine Möglichkeit auch die Kommastelle anzuzeigen?
Hi
Welche Komma Stele?
Also die von dem LM75, das habe ich so gelöst:
viel erfolg!!!Code:if (dat2 >= 0b10000000) { uart_puts ("\r\nTemperatur "); uart_putc (zehner); uart_putc (einer); uart_puts (",5 "); uart_putc (c); uart_puts ("C \r\n"); } else { uart_puts ("\r\nTemperatur "); uart_putc (zehner); uart_putc (einer); uart_puts (",0 "); uart_putc (c); uart_puts ("C \r\n"); }
habe schreiben erst heute gelernt.
bin legasteniger.
by Ferdinand.
Danke sehr, habs einfach durch 32 geteilt erstmal, damit hab ich so halbwegs die kommastellen.
Hast du eigentlich auch mal mit dem LM76 gearbeitet? Muss das Programm jetzt so umschreiben dass es auch für LM76 funzt.
Beim Auslesen der Temperatur des LM75 hängt sich der Prozessor auf, wenn ein Signal über USART reinkommt, versteh das nicht wirklich.
Usart funktioniert Problemlos wenn ich die Zeile auskommentiere:
// temperatur = TWI_empf(ADRESSE_R);
wenn ich sie drinlasse, hängt sich der Prozessor ab und zu auf, wenn über USART etwas empfangen wird während diesen Befehls.
Ist sehr strange, habt ihr da eine Idee?
Programm:
#define F_CPU 16000000UL //Takt 16MHz
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <util/twi.h>
#include "i2c.h"
/* Programm Libs */
#include "defines.h"
volatile uint8_t IRFlag;
volatile uint8_t IR_zaehl=0;
volatile uint8_t RxData;
int main(void)
{
/* TIMER INIT */
SETBIT(TCCR0,CS00);// Prescaler von 1024 16MHz/1024 = 15,6kHz = 64us
SETBIT(TCCR0,CS02);
TCNT0 = 255; // Reload Wert 0-255 250*4us*8 = 8ms = 125Hz
SETBIT(TIMSK,TOIE0); // Timer IR Aktivieren
// DDRD=0xFB; //D0-D1 & D3-D7 as Output
// SETBIT(MCUCR,ISC01); //Fallende Flanke
// SETBIT(GICR,INT0); //Taster IR Aktivieren
sei(); //Globale IRs aktivieren
/* Lokale Variablen: */
/* Ports as Outputs: */
DDRA=0xFF;
DDRB=0xFF;
DDRC=0xFF;
uart_init();
//SETBIT(PORTB,1);
SETBIT(PORTA,3);//VCC für Temp
TWI_init(FAKTOR, TEILER);
unsigned char temperatur=0;
unsigned char komma=0;
char test=0;
while (1)
{
if(IRFlag == 1 && !((UCSRA & (1<<RXC))))
{
IRFlag=0;
SETBIT(PORTB,1);//LED
// temperatur = TWI_empf(ADRESSE_R);
komma=dat2;
CLEARBIT(PORTB,1);//LED
}
//if ( (UCSRA & (1<<RXC)) ) //Zeichen Empfangen?
else
{
RxData=uart_getc();
if(RxData=='R') //Relais Einschalten
{
// SETBIT(PORTB,1);//LED
SETBIT(PORTA,6);//Relais
uart_putc('R');
}
if(RxData=='S') //Relais Ausschalten
{
// CLEARBIT(PORTB,1);//LED
CLEARBIT(PORTA,6);//Relais
uart_putc('S');
}
if(RxData=='T') //Relais Ausschalten
{
if(temperatur)
uart_putc(temperatur);
}
if(RxData=='U') //Relais Ausschalten
{
if(komma)
uart_putc(komma);
}
RxData=0;
}
_delay_ms(20);
/*
uart_putc('f');
_delay_ms(1000);
uart_putc('A');
_delay_ms(1000);
uart_putc(uart_getc());*/
}
}
/* TIMER 0 IR HANDLER */
ISR( TIMER0_OVF_vect ) //Wenn Timer IR kommt Led ausschalten + IR Flag auf 1
{
IR_zaehl++;
if(IR_zaehl==160)
{
IRFlag=1;
IR_zaehl=0;
}
}
/* Taster 0 IR HANDLER */
ISR( INT0_vect )
{
}
Geändert von kremsy (02.06.2012 um 20:03 Uhr)
Aber es tritt auch nicht immer auf, sondern zufällig. Zurzeit tritt es gar nicht auf.
Ich mach mich mal an den LM76.
ab jetzt mal einfach alle Bit-Warteschleifen gegen delay warteschleifen
getauscht.
char TWI_empf(unsigned char adres)
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
//loop_until_bit_is_set(TWCR, TWINT);
_delay_ms(100);
TWDR = adres;
TWCR = (1<<TWINT)|(1<<TWEN);
//loop_until_bit_is_set(TWCR, TWINT);
_delay_ms(100);
TWCR = (1<<TWINT)|(1<<TWEN);
//loop_until_bit_is_set(TWCR, TWINT);
_delay_ms(100);
dat1 = TWDR ;
TWCR = (1<<TWINT)|(1<<TWEA)|(1<<TWEN);
TWCR = (1<<TWINT)|(1<<TWEN);
//loop_until_bit_is_set(TWCR, TWINT);
_delay_ms(100);
dat2 = TWDR ;
//loop_until_bit_is_set(TWCR, TWINT);
_delay_ms(100);
TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
return dat1;
}
Hab Pullup von 5 auf 20kOhm geändert, scheint jetz zu funktionieren.
Lesezeichen