www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ds1820 alarm auswerten


Autor: Torsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich möchte den Alarm mehrere DS1820 auswerten.
Die Anzeige der Temperatur und eine allgemeine Alarmeldung
funktioniert schon.
Wie kann ich einen min und max Wert je Sensor auswerten?
Ich benutze codevision und bin Anfänger!!!
Und hier mein code bis jetzt.

#include <mega16.h>
#include <stdio.h>
#include <delay.h>
// 1 Wire Bus functions
#asm
   .equ __w1_port=0x12 ;PORTD
   .equ __w1_bit=7
#endasm
#include <1wire.h>

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

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

// Declare your global variables here
char lcd_buffer[33];

#define MAX_DEVICES 8

unsigned char rom_code[MAX_DEVICES][9];
unsigned char alarm_rom_codes[MAX_DEVICES][9];
unsigned char ds1820_set_alarm(unsigned char *addr,signed char
temp_low,signed char temp_high);

void main(void)
{
// Declare your local variables here
unsigned char i,j,devices;
int temp;
lcd_init(16);
lcd_putsf("CodeVisionAVR\n1 Wire Bus Demo");
delay_ms(2000);
lcd_clear();

/* detect how many DS1820/DS18S20 devices
   are connected to the 1 Wire bus */
devices=w1_search(0xf0,rom_code);
sprintf(lcd_buffer,"%u DS1820\nDevice detected",devices);
lcd_puts(lcd_buffer);
delay_ms(2000);

/* display the ROM codes for each device */
if (devices)
   {
   for (i=0;i<devices;i++)
       {
       sprintf(lcd_buffer,"Alarm aktivieren #%-u ",i+1);
       lcd_clear();
       lcd_puts(lcd_buffer);
       delay_ms(2000);
       lcd_clear();
       if(ds1820_set_alarm(&rom_code[i][0],26,30))
       sprintf(lcd_buffer,"Alarm OK");

       else sprintf(lcd_buffer,"ERROR");
       lcd_puts(lcd_buffer);
       delay_ms(2000);
       lcd_clear();

       sprintf(lcd_buffer,"Device #%u ROM\nCode is:",i+1);
       lcd_clear();
       lcd_puts(lcd_buffer);
       delay_ms(2000);
       lcd_clear();
       for (j=0;j<8;j++)
           {
           sprintf(lcd_buffer,"%02X ",rom_code[i][j]);
           lcd_puts(lcd_buffer);
           if (j==3) lcd_gotoxy(0,1);
           };
       delay_ms(5000);
       };
   }
else
while (1); /* stop here if no devices were found */

/* measure and display the temperature(s) */
while (1)
      {
      for (i=0;i<devices;)
          {
          temp=ds1820_temperature_10(&rom_code[i,0]);


          j='+';
          if (temp<0)
             {
             j='-';
             temp=-temp;
             };


sprintf(lcd_buffer,"t%u=%c%i.%u\xdfC",++i,j,temp/10,temp%10);


          lcd_clear();
          lcd_puts(lcd_buffer);
          delay_ms(800);
          lcd_gotoxy(0,1);
          sprintf(lcd_buffer,"ALARM BY %-u\n\r",
           w1_search(0xec,alarm_rom_codes));



          lcd_puts(lcd_buffer);
                   };
      };
}

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.