Forum: Mikrocontroller und Digitale Elektronik ROM-Codes als HEX-Zahlen per USART 0 senden


von ÖZ K. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Technikfreunde,
leider kommen wir als Gruppe nicht mehr weiter und haben unseren Code 
weitestgehend ausgefüllt. Leider haben wir kaum noch Zeit und noch 
weniger Ahnung.
Könnte uns da jemand helfen?
Wir müssen das bis Mitternacht abschicken.

Danke im voraus :)

von Stefan F. (Gast)


Lesenswert?

Würdest du dir bitte wenigstens die Mühe machen, konkrete Fragen zu 
stellen? Danach helfe ich dir gerne.

von STK500-Besitzer (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Würdest du dir bitte wenigstens die Mühe machen, konkrete Fragen zu
> stellen? Danach helfe ich dir gerne.

Die Aufgaben stehen im Quellcode. Liest sich wie eine Hausaufgabe.

von Bruuuuhaha (Gast)


Lesenswert?

ÖZ K. schrieb:
> Hallo Technikfreunde,

... ja wir machen deine Hausaufgaben!

von H.Joachim S. (crazyhorse)


Lesenswert?

if (w1_init() = 1)

macht jedenfalls schon mal nicht was du wahrscheinlich erwartest.

Beitrag #6575383 wurde von einem Moderator gelöscht.
von Huckel (Gast)


Lesenswert?

> ... arduinisch ...

Wie kommst du darauf?
1
#define F_CPU 16000000
2
3
// 1-Wire Befehls-Codes
4
#define SKIP_ROM 0xCC
5
#define CONVERT_T 0x44
6
#define READ_SCRATCHPAD 0xBE
7
#define READ_ROM 0x33
8
#define MATCH_ROM 0x55
9
10
#define DS18B20_FAMILY_CODE 0x28
11
12
#define MAX_DEVICES 3                  // Maximal erwatete Zahl von Busteilnehmern DS18B20
13
14
//Nachfolgend müssen noch zwei Bibliotheks-Dateien korrekt eingebunden werden (bitte Punkte passend ersetzen)
15
#include <avr/io.h>
16
#include <util/delay.h>
17
#include <stdlib.h>                    // für abs() Funktion, falls benötigt
18
#include <wire1.h>                      // Muss sich im Arbeitsverzeichnis befinden!!
19
#include <uart.h>                      // Muss sich im Arbeitsverzeichnis befinden!!
20
21
// Deklaration der globalen Variablen (bitte Punkte passend ersetzen)
22
int16_t temperature_10;                  // Sensortemperatur x 10 in 0,1°C Stufen
23
uint8_t w1_devices_rom_codes[MAX_DEVICES][...];      // 2D-Array zur Aufnahme der Teilnehmer-ROM-Code-Daten
24
uint8_t w1_devices;                    // Anzahl der am Bus gefundenen Teilnehmer
25
26
int main(void)
27
{
28
  // UART 0 Initialisieren  (bitte Punkte passend ersetzen)
29
  uart_setup(UART_RX_DISABLE, UART_TX_ENABLE, 19200);  // Empfangen deaktivieren, Senden aktivieren,
30
  // Baudrate ... Bit/s
31
  
32
  // 1-Wire-Schnittstelle initialisieren  (bitte Punkte passend ersetzen)
33
  w1_setup(PORTC , 2);                // Port und Portbit wählen gemäß Hardwarebeschreibung
34
  
35
  sei();                        // Bibliotheksfunktionen nutzen Interrupts, daher
36
  // müssen Interrupts global freigeben werden
37
  
38
  printf("\r\n----------------------\r\n1 Wire Bus Thermometer\r\n----------------------\r\n\r\n");
39
  
40
  if (w1_init() = 1)                    // Neue 1-Wire-Befehlsfolge initialisieren und nur
41
  {                          // falls Teilnehmer am Bus erkannt werden weitersenden
42
    // Teilnehmersuche für DS18B20 Temperatursensoren durchführen und Sensoranzahl ermitteln
43
    w1_devices = w1_search(0xF0, & w1_devices_rom_codes)        ;
44
45
    // Zahl der gefundenen Temperatursensoren und deren jeweilige ROM-Codes als HEX-Zahlen per USART 0 senden
46
    ...                        // (bitte Punkte passend durch Programmsequenz ersetzen)
47
    ...
48
    ...
49
    
50
    ...
51
  }
52
  else                        // Falls keine Teilnehmer am 1-Wire-Bus gefunden wurden ...
53
  {
54
    printf("Keinen Busteilnehmer gefunden\r\n\r\n");// ... eine entsprechende Meldung über USART 0 senden
55
  }
56
  
57
  while (1)                      // Periodisch Temperaturwerte mit allen Temperatursensoren
58
  {                          // messen und als Textmeldung per USART 0 senden
59
    // Periodisch Temperaturwerte mit allen Temperatursensoren messen und als Textmeldung per USART 0 senden
60
    for ()                    // (bitte Punkte passend ersetzen)
61
    {
62
      // Temperaturwert anfordern und auslesen
63
      temperature_10 = w1_read()    ;
64
      
65
      // Sensornummer und Temperaturwert nur senden, wenn beim Auslesen kein Fehler aufgetreten ist, ...
66
      if (temperature_10 != 1)          // (bitte Punkte passend ersetzen)
67
      {
68
        printf("Sensor %d: %+d,%d Grad Celsius\r\n",(i+1),(temperature_10 / 10),(temperature_10 % 10))      ;          // (bitte Punkte passend ersetzen)
69
      }
70
      // ... im anderen Fall eine Fehlermeldung mit Angabe der Sensornummer senden
71
      else
72
      {
73
        printf("Die Eingabe ist falsch\r\n\r\n")      ;          // (bitte Punkte passend ersetzen)
74
      }
75
      // Das einfügen einer Pause (DELAY) ist nicht erforderlich, da ein Temperaturmessvorgang ca. 0,8 s dauert
76
    }
77
  }
78
}

Beitrag #6575397 wurde vom Autor gelöscht.
von ÖZ K. (Gast)


Lesenswert?

Hat sich scheinbar was drauf eingebildet, dass er endlich mal was besser 
kann und versteht.
Der Lockdown macht sich bemerkbar.
Wie man eben erkennt, habe ich auch paar Sachen bereits versucht 
auszufüllen also ist der Kommentar mit "Hausaufgaben" nur Müll.

von Martin B. (martin_b97)


Lesenswert?

Naja, was könnte man wohl damit vielleicht anfangen:
1
uint8_t w1_devices_rom_codes[MAX_DEVICES][...];    // 2D-Array zur Aufnahme der Teilnehmer-ROM-Code-Daten
2
uint8_t w1_devices;          // Anzahl der am Bus gefundenen Teilnehmer

von Huckel (Gast)


Lesenswert?

Wenn du Zeile 40 korrigiert hast, dann weiter mit der Länge des 
ROM-Codes (siehe 
Beitrag "Re: ROM-Codes als HEX-Zahlen per USART 0 senden").

von STK500-Besitzer (Gast)


Lesenswert?

ÖZ K. schrieb:
> Hat sich scheinbar was drauf eingebildet, dass er endlich mal was
> besser
> kann und versteht.
> Der Lockdown macht sich bemerkbar.
> Wie man eben erkennt, habe ich auch paar Sachen bereits versucht
> auszufüllen also ist der Kommentar mit "Hausaufgaben" nur Müll.
1
for(uint8_t index = 0; index < w1_devices; index++){
2
 printf("Device #%02d: 0x%02X\r\n", index+1, w1_devices_rom_codes[index]);
3
}
Man darf sogar printf verwenden ^^.
Laaangweilig.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.