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 :)
Würdest du dir bitte wenigstens die Mühe machen, konkrete Fragen zu stellen? Danach helfe ich dir gerne.
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.
if (w1_init() = 1) macht jedenfalls schon mal nicht was du wahrscheinlich erwartest.
Beitrag #6575383 wurde von einem Moderator gelöscht.
> ... 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.
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.
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 |
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").
Ö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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.