1-Wire-Slave-Baukasten V.2

    • Hi cineks,
      there is another error:
      Not connect direct to UART, but to GPIO4.
      Take look at: 1-Wire-Slave-Baukasten V.2

      1-Wire-Data -> GPIO4 of RPi (with resistor 4,7 to 3,3V RPi)
      1-Wire-GND -> GND RPi
      1-Wire-VCC -> 3,3V RPi

      Then you must load the drivers:

      modprobe w1-gpio
      pullup=1modprobe w1-therm

      If you use UART you need an adapter, for example DS2480 or DS2480B an other drivers.

      Thank you for the files.

      RoBue
    • ehh,
      not work,
      after changes lockbits the led blinks faster :)
      Nothing changed the purchase of a new attiny.
      Maybe this is a new/old/another version of bme280 and is not properly detected.
      My module looks different from yours (see attach).

      RoBue schrieb:

      If you use UART you need an adapter, for example DS2480 or DS2480B an other drivers.

      yes, I use UART with adapter DS2480 and work properly.
      To the adapter I have connected counter ds2423 (emulation on attiny 25), ds18b20.
      work.

      best regards
      Dateien
    • Hi cinecs,
      sorry I had not enough time to answer.

      That's bad.
      Ok.
      I still want to solve this problem!!!

      Please test the following hex-code with an ATtiny85 without the converter and BME.
      It is a simple counter (not a DS2423 or compatible with it).
      Does the DS2480 and the RPi detect this as a DS18B20?
      (Temperature: 0°)

      1-Wire-Slave-0x28_ATtiny85_Counter_Timer1.zip

      If not - I have no idea, how I can help you from the distance.

      Please send your module to me.
      The address is in this forum.
      Then I can test it with my hardware and can say more.
      Poland is not America or Asia ;)

      Greetings,
      RoBue

      PS: What are the connections "CSB" and "SD0" (I hope I read right this)?
      Are these something like "chip select"?
      Must you connect these for eample to GND or VCC?

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von RoBue ()

    • 13. 1-Wire-Slave mit HC-SR04 und LM35 (Distanzmessung, Füllstandsanzeige)

      Hi, nachdem ich meine ersten Versuche mit dem Ultraschallsensor HC-SR04 gemacht habe,

      -> 1-Wire-Slave-Baukasten V.2

      stelle ich hier meine verbesserte Version ein.

      Der Grund für die Änderung ist der,
      dass die Temperatur die Schallgeschwindigkeit beeinflusst.
      Diese wurde bisher nicht berücksichtigt.
      In der neuen Version wurde zusätzlich ein LM35-Temperatursensor eingebunden (hatte ich gerade rumliegen).

      Prinzip:
      Die Echo-Leitung wird in Zeitintervallen abgefragt,
      die jeweils für 5cm Weg nötig sind,
      d.h. man bekommt die Entfernung in 5cm-Schritten.

      Die Zeitintervalle werden - im Gegensatz zur vorigen Version - an die jeweilige Schallgeschwindigkeit bei der gemessenen Temperatur angepasst.
      Die Formeln dafür sind im Code erklärt (Leistungskurs Physik trägt späte Früchte!)

      Der Init-Teil:

      BASCOM-Quellcode

      1. '***************************************
      2. ' Variable und Init-Routinen
      3. Dim Ausgabewert As Single
      4. Dim Ausgabeinteger As Integer
      5. Dim Ausgabe As String * 8
      6. ' PORTB.3 -> Trigger
      7. Config Portb.3 = Output
      8. Portb.3 = 0
      9. ' PORTB.4 -> Echo
      10. Config Portb.4 = Input
      11. ' PORTB.7 -> ADC-Eingang fuer LM35
      12. Config Adc = Single, Prescaler = Auto
      13. Dim Temperatur As Integer
      14. Dim Intervall As Word
      Alles anzeigen

      Der Berechnungsteil (Calculatedata) mit Formeln:

      BASCOM-Quellcode

      1. Calculatedata:
      2. If Match_slave = 1 Then
      3. ' Zaehler fuer Abfrage zuruecksetzen -> Fehlererkennung
      4. Daten_array(8) = 0
      5. ' Problem:
      6. ' Die Schallgeschwindigkeit ist von der Temperatur abhaengig
      7. ' Formel_1: V(Luft) = (331.5 + 0.6 * Temp) | Einheit: Meter/Sekunde
      8. ' Der Weg s, der in einer bestimmten Zeit t zurueckgelegt wird,
      9. ' errechnet sich aus:
      10. ' Formel_2: s = V * t => s = V(Luft) / t | t = Messzeit / 2
      11. ' (Die Messzeit gilt fuer den Weg hin und zurueck => Division durch 2)
      12. ' Die Zeit t, fuer das Zurucklegen einer bestimmten Strecke s benoetigt wird,
      13. ' errechnet sich aus:
      14. ' Formel_3: t = (s / V) * 2
      15. ' Daraus ergibt sich als Zeitintervall fuer eine Messung in 5cm-Schritten:
      16. ' Intervall = (0.05 / 331.5 + 0.6 * Temp)) * 2
      17. ' Die Werte liegen im us-Bereich.
      18. ' Damit man leichter rechnen kann (Integer- oder Word-Werte),
      19. ' sollte man das Ganze noch mit 1.000.000 multiplizieren
      20. ' Problemloesungen:
      21. ' - Variante 1 ohne interne Temperaturkompensation:
      22. ' Man fragt das Echo immer in 100 us oder 200 us - Schritten ab
      23. ' und kompensiert mit der Temperatur gegebenenfalls auf dem 1-Wire Server
      24. ' durch einen weiteren 1-Wire-Slave, z.B. DS18B20
      25. ' Intervall = 100
      26. ' While Pinb.4 = 1
      27. ' Waitus Intervall
      28. ' Incr Ausgabeinteger
      29. ' ' Mehr als 3m -> kein Echo
      30. ' If Ausgabeinteger > 100 Then Exit While
      31. ' Wend
      32. ' ...
      33. ' Daten_array(5) = Low(ausgabeinteger)
      34. ' Daten_array(6) = High(ausgabeinteger)
      35. ' - Variante 2 mit interner Temperaturkompesation
      36. ' Temperatur messen (LM35 an PORTB.7)
      37. ' 0V -> 0°C ; 1.5V -> 150°C
      38. Start Adc
      39. Temperatur = Getadc(1)
      40. Waitms 10
      41. Temperatur = Getadc(1)
      42. Waitms 10
      43. ' Dieser Wert wird genommen
      44. Temperatur = Getadc(1)
      45. Stop ADC
      46. ' Umrechnung: (5V / 1024) * Adcwert * 1000 -> °C * 10
      47. ' Ungefaer:
      48. Temperatur = Temperatur * 5
      49. ' Abfrageintervall fuer 5 cm in Abhaengigkeit der Temperatur berechnen
      50. ' Formel (s.o.): (0.05 / (331,5 + (0.6 * Temperatur))) * 2 * 1.000.000
      51. Ausgabewert = Temperatur / 10
      52. Ausgabewert = Ausgabewert * 0.6
      53. Ausgabewert = Ausgabewert + 331.5
      54. Ausgabewert = 100000 / Ausgabewert
      55. Intervall = Ausgabewert
      56. ' Sende Ultraschallsignal
      57. Portb.3 = 1
      58. Waitus 10
      59. Portb.3 = 0
      60. ' Warte auf Empfang
      61. Ausgabeinteger = 0
      62. Do
      63. Loop Until Pinb.4 = 1
      64. ' Dauer messen
      65. While Pinb.4 = 1
      66. Waitus Intervall
      67. Incr Ausgabeinteger
      68. ' Mehr als 3m -> kein Echo
      69. If Ausgabeinteger > 100 Then Exit While
      70. Wend
      71. ' Ausgabe in cm
      72. Ausgabeinteger = Ausgabeinteger * 5
      73. ' Datenarray beschreiben
      74. Daten_array(1) = Low(temperatur)
      75. Daten_array(2) = High(temperatur)
      76. Daten_array(5) = Low(ausgabeinteger)
      77. Daten_array(6) = High(ausgabeinteger)
      78. ' CRC bestimmen
      79. Daten_array(9) = Crc8(daten_array(1) , 8)
      80. End If
      81. 'Goto Readb
      82. Goto Waitreset
      Alles anzeigen

      Anschlussbelegung des ATtiny45/85 (ATtiny25 ist zu klein):
      Pin 1 und 8: VCC ---------- VCC HC-SR04 + LM35
      Pin 2: -------------------- Trig HC-SR04
      Pin 3: -------------------- Echo HC-SR04
      Pin 4: GND ---------------- GND HC-SR04 + LM35
      Pin 5: Kontroll-LED (gegen GND)
      Pin 6: 1-Wire-Port
      Pin 7: -------------------- Ausgang LM35

      Das Scatchpad:
      Byte 1,2 -> Temperatur in C x 10
      Byte 2,3 -> unbenutzt
      Byte 5,6 -> Distanz in cm (5 ... 305; 505: kein Echo erhalten!)
      Byte 7 -> leer (evtl. Versorgungsspannung)
      Byte 8 -> Fehlerausgabe
      'Byte 9 -> CRC

      Der Code:
      1-Wire-Slave_HC-SR04_LM35_2017-23-09.zip

      LG RoBue

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von RoBue ()