www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programmbeispiel Temepraturanzeige...


Autor: Björn Wekerle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ihr Bastler;-)

Ich hatte vor zwei tagen ein Problem damit, meinen ATMEGA 163 zu 
programmieren...jetzt klappts (die Kabelbelegung, die unter 
mikrocontroller.net angegeben war, stimmte nicht mit Ponyprg überein).

Hab gestern das LCD-Temperaturprogramm laufen lassen: da ich ein 20x4 
Display am AVR-CRTL habe und eine ATMEGA 163 drauf, bin ich um ein paar 
Modifikationen m´nicht herum gekommen (include mega163.....diplay 
rows-anzahl....)

ABER: die Temperatur wird nur mit -999. °C angezeigt...woher kann das 
kommen? Muss ich eventuell noch am assemblercode etwas verändern???


Danke für die Hilfe und Grüße aus Stuttgart

Björn

Autor: Björn Wekerle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat nimenad eine Idee, wqarum die Anzeige nur -999. anzeigt???

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In den Kopf schauen kann Dir keiner !

Da must Du schon den Code posten, damit jemand was finden kann (z.B.
als Dateianhang).


Peter

Autor: Björn Wekerle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier nun noch der CODE:
-------------------------------------

#include <mega163.h>
#include <delay.h>
#include <stdio.h>

// 1 Wire Bus functions
#asm
   .equ __w1_port=0x12
   .equ __w1_bit=4
#endasm
#include <1wire.h>

// DS1820 Temperature Sensor functions
#include <ds1820.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15
#endasm
#include <lcd.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here
char text[16];
// Input/Output Ports initialization
// Port A
PORTA=0x00;
DDRA=0x00;

// Port B
PORTB=0x00;
DDRB=0x00;

// Port C
PORTC=0x00;
DDRC=0x00;

// Port D
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Output Compare
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Output Compare
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Output Compare
// OC2 output: Disconnected
TCCR2=0x00;
ASSR=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
GIMSK=0x00;
MCUCR=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;

// 1 Wire Bus initialization
w1_init();

// LCD module initialization
lcd_init(20);
lcd_putsf("Temperaturanzeige");

while (1)
      {
      int temp;
      temp = ds1820_temperature_10(NULL);
       lcd_gotoxy(0,1);
       sprintf(text, "Temp:%i.%c \xDFC",temp/10,temp%10+0x30 );
       lcd_puts(text);
      };
}
------------------------------------------

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist ja nur das Rahmenprogramm, da passiert ja nichts.
Wichtig ist, was in dieser Funktion erfolgt:

temp = ds1820_temperature_10(NULL);

Da muß es doch eine Doku dazu geben, die Du gründlich durcharbeiten
mußt.


Ich halte aber nichts davon, solche komplexen Programme blind zu
übernehmen. Die Erfolgsaussichten sind eher gering und man lernt dabei
auch nichts.
Entweder man versucht da erst durchzusteigen oder man schreibt sich
anhand des DS1820-Datenblattes seine eigenen Routinen.


Peter

Autor: emil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi björn,

damit muss es klappen; nächstes mal beispiel besser studieren ;))

#include <mega163.h>
#include <stdio.h>
#include <ds1820.h>
#include <1wire.h>
#include <lcd.h>

#asm
   .equ __w1_port=0x12
   .equ __w1_bit=4
   .equ __lcd_port=0x15
#endasm

char text[16];
char rom_codes[9];

//falls du mehrere sens. hast, wird es dann
//rom_codes[n,9], wo n deren anzahl ist;


void main(void)

{
w1_init();
w1_search(0xf0,rom_codes);

lcd_init(20);
lcd_clear();
lcd_putsf("Temp., °C:");

while (1)
      {
      int temp;
      temp = ds1820_temperature_10(&rom_codes[0]);
      sprintf(text,"%2i.%-u",temp/10,abs(temp%10));

      lcd_gotoxy(0,1);
      lcd_puts(text);
      };
}

Autor: emil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
btw, text[16] ist natürlich viel zu breit, text[5] reicht schon

Autor: emil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry, natürlich muss man noch
#include<math.h>
dazu schreiben, wegen der abs()-funktion.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie es aussieht, ist es anscheinend doch jemandem gelungen, anhand
Deines Programmfragments zu erkennen wovon Du eigentlich sprichst.

Ich weiß immer noch nicht mehr, als das es um den DS1820 geht.


Du kannst in Zukunft ruhig etwas über die verwendete Hardware und
Software (Hersteller, Bezeichnung, Link) verlauten lassen.

Solche unkonkreten Aussagen, wie "das LCD-Temperaturprogramm" und
"am AVR-CRTL" ergeben bei Google nämlich keinen einzigen Treffer.


Peter

Autor: Björn Wekerle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Programm hat auch nicht mehr als

Temp., -C:
-999.9

auf das Display gebracht:-(

Eventuell aufgrund dieser Anzeige einen Tip????

Autor: emil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die funktion:

 ds1820_temperature_10(unsigned char *addr);

gibt den wert "-9999" zurück, wenn kein ds1820 gefunden wird;

hardware überprüfen!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.