Skip to content

Technical Documentation (German)

nurazur edited this page Jan 23, 2024 · 28 revisions

Inhalt

Beschreibung des Projekts TiNo2

Das Funksystem ist sternförmig aufgebaut und besteht aus Sendern (Sensoren), Aktoren (Empfängern die eine Aktion auslösen) und einem Gateway. Der TiNo2 Sensor macht periodisch eine Messung, z.B. der Umgebungstemperatur und sendet das Ergebnis mit einer kurzen HF Aktivität ("Puls") an das Gateway. Dieses bereitet das Signal auf und speichert das Ergebnis in einer Datenbank, die z.B. von einem Cloud Service ausgewertet werden kann. Der TiNo2 Sensor kann gleichzeitig auch Überwachungsaufgaben übernehmen, wie z.B das Öffnen einer Türe melden.

Diese Entwicklung ist die zweite Generation des Projekts TiNo. Im Wesentlichen wird der bekannte Prozessor ATmega328P durch einen modernen AVR ersetzt. im ersten Schritt ist dies ein ATmega4808, welcher eine Reihe von Verbesserungen und Erweiterungen bietet. In einem zweiten Schritt kann der AVR64DD32 eingesetzt werden, welcher zum ATmega4808 pin-kompatibel ist.

Back to Top

Das Konzept

Minimale Kosten:

Momentan ist die Auswahl des AVR64DD28 Processors mit dem RFM69HCW HF-Modul die kostengünstigste Variante. Weiterhin kann auf LDO's oder DC-DC Konverter verzichtet werden, da alle Module direkt mit einer 3V CR2032 Batterie, einer CR2450 Batterie oder einer 3V 1/2 AA Batterie betrieben werden können. Als Gehäuse für die Indoor-Variante kommt nur ein preisgünstiges PVC Standardgehäuse infrage, was leider nicht gerade stylisch daher kommt.

minimale Grösse

Aufgrund der verwendeten Frequenzen kann man die Baugrösse eines Sensors nicht beliebig verkleinern ohne grosse Zugeständnisse an die Performance zu machen. Mit Platinenabmessungen von ca. 35 x 50 mm habe ich im 868MHz ISM Band gute Erfahrungen gemacht. Im 433MHz ISM Band funktioniert das ebenfalls durchaus zufriedenstellend.

minimaler Stromverbrauch

Konsequente Umsetzung der Möglichkeiten des Prozessors. Optimierung der HF Parameter. Optimierung der Stromversorgung. Verwendung stromsparender Sensoren.

maximale Batterielebensdauer

Die Lebensdauer der Batterie hängt vom Einsatzfall ab. Sie setzt sich im Wesentlichen aus den vier folgenden Komponenten zusammen:

  1. die Batterie. Der TiNo2 hat einen CR2032 Knopfzellenhalter eingebaut. Eine CR2032 hat geschätzt 200mAh nutzbare Kapazität.
  2. die Energie die bei einem Sendeimpuls verbraucht wird. In diesem Projekt habe ich die Dauer des Impulses sowie seine Leistung optimiert. Gegenüber dem TiNo konnte ich beim TiNo2 den Strombedarf per Puls nocheinmal um 20% senken.
  3. der Ruhestrom. Die modernen AVR's ziehen mit oder ohne Uhrenquarz etwa 2µA Ruhestrom. Der externe Uhrenquarz ergibt beim TiNo2 nur dann Sinn, wenn man die Zeitintervalle quarzgenau gestalten will.
  4. die Anzahl der Sendepulse pro Zeit. bei einer Rate von einem Puls pro Minute überwiegt der Stromverbrauch der Sendepulse. Bei einer Rate von einem Puls pro Stunde überwiegt der Stromverbrauch durch den Ruhestrom. Bei einem typischen Temperatur/Luftfeuchte Sensor, der alle 30 Minuten eine Messung sendet kann eine CR2032 Zelle 5 Jahre oder länger halten. In meinem Blog gibts das Ganze sehr ausführlich erklärt.

maximale Reichweite

Gegenüber dem TiNo hat der TiNo2 eine optionale interne Antenne, welche u.U eine Richtwirkung hat und durch Gegenstände in der unmittelbaren Nähe verstimmt werden kann. deshalb kann auch der TiNo2 alternativ mit der Drahtantenne betrieben werden.

maximale Sicherheit

Das Sendeprotokoll ist verschlüsselt. Der Schlüssel kann nicht aus dem Flash gelesen werden wenn das Basisband versperrt wurde. Um zu verhindern dass ein einmal aufgezeichnetes Signal bei Wiederholung etwas auslöst wird ein "rolling code" verwendet, der sicherstellt dass jedes Protokoll "einmalig" ist.

Einfachheit

Ganz einfach: so einfach wie moeglich, nur so kompliziert wie unbedingt noetig. Ist trotzdem nicht einfach genug. Ich arbeite daran.

Plug&Play Firmware

Es wird ein Modul im Boards Manager der Arduino IDE bereitgestellt.

Unkomplizierte Hardware

Back to Top

Wie Funktionierts?

Ein TiNo ist ein Sensor der periodisch eine Messung vornimmt und diese per Funksignal an ein Gateway überträgt. Dieses Gateway besteht normalerweise aus einem als Empfänger konfigurierten TiNo der an einen Raspberry Pi über dessen seriellen Port angeschlossen ist. Das Gateway empfängt die Funksignale, dekodiert sie und wenn die Daten sinnvoll sind werden diese an den Raspberry Pi weitergegeben. Ausserdem quittiert das Gateway die Nachricht auf Aufforderung. Das zwischen Gateway und Raspberry von mir verwendete Protokoll ist einfach, könnte aber im Prinzip jedem beliebigen Standard folgen. TiNos können standardmässig auch auf externe Signale reagieren, z.B Tueröffner Kontakte. Auf dem Raspberry Pi läuft ein Python Programm, welches die vom Gateway ankommenden Pakete aufbereitet und in eine Datenbank schreibt. Eine Web Applikation kann dann auf diese Daten zugreifen und daraus Graphiken etc machen. Dies ist aber (noch) nicht Gegenstand des TiNo Projekts.

Um eine Funkverbindung herzustellen braucht man zwei TiNos, einen als Sensor konfigurierten und einen als Gateway konfigurierten.

Hardwarearchitektur

Die TiNo Boards sind so einfach wie möglich aufgebaut:

  • direkt von einer 3V Batterie gespeist
  • AVR Prozessor
  • RFM69HCW oder RFM95 Modul von HopeRF
  • Footprint für einen SHTC3 und einen SHT4x ist auf der Leiterplatte
  • Anschlussmöglichkeiten für einen I2C Sensor beliebiger Wahl.
  • Ein Batteriehalter
  • UPDI Pin zum Flashen
  • FTDI Adapter Anschluss, 1x6 Pin Leiste
  • je nach Board verschiedene GPIO's die man für alle möglichen analogen und/oder digitalen Ereignissen (z.B. Tastendruck) konfigurieren kann
  • Status LED
  • auf manchen Boards ist eine optionale SMA Buchse vorgesehen (externe Antenne)
  • alle Boards sind jeweils für ein bestimmtes Gehäuse konzipiert, können aber auch anderweitig eingesetzt werden. TiNo HP Anschlüsse Oberseite TiNo HP Anschlüsse Unterseite

Softwarearchitektur

TiNo Sensor Software Architektur

Back to Top

IDE Einrichten

  1. Installiere MegaCoreX
  2. Installiere TiNo2 Bibliotheken

Installation der MegaCoreX Bibliothek über Boards Manager (Normalfall)

  • Arduino IDE starten.
  • File->Preferences öffnen.
  • Unter Additional Boards Manager URL's diesen Link eintragen:
    https://mcudude.github.io/MegaCoreX/package_MCUdude_MegaCoreX_index.json
    
  • Einträge mit einem Komma ( , ) trennen, wenn es mehr als einen URL Eintrag gibt.
  • Boards Manager öffnen: Auf Tools > Board > Boards Manager... Klicken.
  • Jetzt werden die vorhandenen Platformen heruntergeladen. Warte bis der Vorgang beendet ist.
  • Suche den Eintrag MegaCoreX und klicke drauf.
  • Klick Install.
  • Nachdem der Installationsvorgang beendet ist, schliesse das Boards Manager Fenster.

Manuelle Installation der MegacoreX Bibliothek (alternativ)

  • Öffne die Seite vonMegacoreX
  • Lade die Bibliothek herunter, klicke Code - > Download-ZIP.
  • Extrahiere die Datei in einem Ordner.
  • in dem Ordner wo sonst die Sketches stehen, generieren den Ordner hardware, wenn er nicht bereits existiert.
  • Bewege die zuvor extrahierte Bibliothek in den Ordner hardware Click on the "Download ZIP" button.
  • Öffne die Arduino IDE. Im Boards Menü taucht jetzt eine neue Kathegorie "MegacoreX" auf.

Installation des TiNo2 Pakets

  • Arduino IDE starten.
  • File->Preferences öffnen.
  • Unter Additional Boards Manager URL's diesen Link eintragen:
    https://raw.githubusercontent.com/nurazur/TiNo2/master/package_nurazur_TiNo2_index.json
    
  • URL Einträge mit einem Komma ( , ) trennen
  • Boards Manager öffnen: Auf Tools->Board->Boards Manager... Klicken.
  • Jetzt werden die vorhandenen Platformen heruntergeladen. Warte bis der Vorgang beendet ist.
  • Suche den Eintrag nurazur TiNo2 Boards und klicke drauf.
  • Klick Install. Dies installiert die Bibliotheken die zum Betrieb des Funkprotokolls gebraucht werden.
  • Nachdem der Installationsvorgang beendet ist, schliesse das Boards Manager Fenster.

Empfänger (Gateway)

Der Empfänger oder besser "Gateway" wird für ein Board mit 16 MHz Taktfrequenz kompiliert. Hierzu in der Arduino IDE das Board TiNo2 receiver in der Board Gruppe TiNo2-megaavr auswählen. Dies ist die Standardvariante, die einen Bootloader voraussetzt. Um einen Sketch ohne vorhandenen Bootloader zu programmieren, wählt man das Board TiNo2 (ATmega4808) aus. Damit bekommt man im Board Menü mehrere Parameter zur Auswahl, darunter "Bootloader Yes / No".

Für spezielle Konfigurationen kann man auch das Board MegacoreX->4808 auswählen. Damit kann man einige zusätzliche Einstellungen vornehmen, die aber für den TiNo entweder irrelevant oder kontraproduktiv sind. Hier ist also Vorsicht geboten.

Alternativ kann man, wenn man ein Poweruser ist, das Tool avrdude einrichten und direkt von der Kommandozeile aus verwenden. Dies hat eine Reihe von Vorteilen, da man damit einfach die Fuses abfragen kann, das EEPROM löschen/flashen oder auch fertig kompilierte .hex Dateien direkt auf das Board flashen kann ohne mühsam durch die Arduino IDE klicken zu müssen.

Sender

Der Sender oder besser "Node" (Knoten in einem Netzwerk) wird für ein Board mit 1 MHz oder 4 MHz Takt kompiliert. Hierzu in der Arduino IDE das Board TiNo2 Sender Standard Config in der Board Gruppe TiNo2-megaavr auswählen. Damit bekommt man im Board Menü mehrere Parameter zur Auswahl, darunter "Clock internal 1MHz / internal 4MHz" und "Bootloader Yes / No".

Weitere Bibliotheken Installieren

Folgende Bibliotheken braucht man zusätzlich obligatorisch zur Installation des TiNo Boards:

optionale Bibliotheken, bei Bedarf:

Die Onewire Bibliothek ist derzeit nicht mit den modernen AVR's kompatibel, daher musste ich eine Kopie mit der Korrektur auf meinen Github Bereich legen.

Die gelisteten Bibliotheken sind nicht mit im TiNo Package enthalten. Der Gedanke dahinter ist dass man die Bibliotheken ja auch für was anderes als TiNo verwenden kann.

Back to Top

Firmware Kompilieren und Flashen

Dazu braucht man, zumindest kurzfristig, einen UPDI Programmer. Zum Flashen von Sketchen gibt es zwei Konzepte. Im ersten Fall kopiert der Programmer den kompilierten Sketch in das Flash des TiNo2. D.h wann immer man einen neuen Sketch Flashen will, muss man den Programmer zur Hand haben.

Im zweiten Fall kopiert man einmal einen Bootloader in das Flash. Dieses Programm schaut nach dem Reset des Mikrokontrollers ob ein neuer Sketch geladen werden soll. Ist das der Fall, wird der neue Programm Code per UART empfangen und ins Flash kopiert, ansonsten wird der vorhandene Sketch ausgeführt.

Anders als bei seinem Vorgänger brauchen beim TiNo2 keine "Fuses" explizit programmiert zu werden. Dies geschieht jetzt jedesmal wenn ein Sketch geflasht wird. Das Flashen eines Bootloaders ist optional, aber ich empfehle es weil man dann zum Flashen von Sketchen keinen Programmer mehr braucht.

Wer TiNo's selber herstellen will, braucht also auf jeden Fall einen UPDI Programmer wie z.B. den ATMEL ICE. Dies ist ein hochpreisiger Universal Atmel/Microchip Programmer mit dem man auch Debuggen kann. Wenn es nur ums Flashen geht gibt es glücklicherweise den serialUPDI Programmer, den man sich kinderleicht für < 2 EUR selbst herstellen kann.

Die von mir gelieferten TiNo2 haben alle bereits einen Bootloader, d,h. ein Programmer wird für diese TiNos nicht benoetigt.

Flashen mit FTDI und USB-Seriell Adapter

Einmaliger Vorgang, wenn man das Board zum ersten mal startet:

  • Programmer an den UPDI Pin des Boards anschliessen.
  • Wenn man einen serialUPDI als Programmer benutzt: Bei Tools->Programmer "serialUPDI (230400 baud)" auswählen.
  • Ansonsten den Programmer seiner Wahl auswählen
  • COM Port des Programmers einstellen unter Tools->Port
  • Setup je nach Anwendung auswählen, "Sender" oder "Receiver". Die Option ohne Bootloader wählen.
  • Tools->Burn Bootloader klicken. Jetzt wird das Board mit den zuvor gewählten Parametern konfiguriert und der Bootloader geflasht.

Normales Flashen:

  • COM Port des seriellen Interfaces auswählen: Tools -> Port
  • in der IDE Sketch -> Upload klicken. Jetzt wird der Sketch kompiliert und geflasht.

Flashen mit ISP Adapter und Programmer

  • Programmer an den UPDI Pin des Boards anschliessen.
  • Setup je nach Anwendung auswählen, "Sender" oder "Receiver". Die Option ohne Bootloader wählen.
  • den Programmer seiner Wahl auswählen
  • COM Port des Programmers einstellen unter Tools->Port
  • In der Arduino IDE sketch->Upload using Programmer klicken. Jetzt kompiliert der Sketch, eventuell mit Warnungen (die man aber ignorieren kann) und lädt den binären Code auf das Board hoch.

Back to Top


Nodes Konfigurieren

Nach dem Flashen sind die Nodes und die Gateways noch nicht betriebsbereit (leider). Das EEPROM muss zuerst mit sinnvollen Daten gefüllt, "kalibriert" werden.

Python tool tino2cal.py

nach dem Start eines TiNos liest der Mikrocontroller das EEPROM. Da die Daten verschlüsselt sind, werden sie zunächst entschlüsselt und die Prüfsumme gebildet.

Wenn die Prüfsumme mit der aus dem EEPROM gelesenen übereinstimmt:

  • über den seriellen Port wird der String "CAL?" zum PC gesendet. Wenn innerhalb von 250ms ein 'y' zurückkommt, geht der TiNo in den Kalibriermodus. Kommt keine Antwort, sendet der TiNo, nur als Debugnachricht, ein "timeout". Also nicht wundern über das Timeout, das zeigt an dass alles in Ordnung ist. Man sieht es allerdings nur wenn man das TiNo Board direkt mit einem Terminalprogram (z.B. minicom oder TeraTerm) verbindet.

Wenn die Prüfsumme nicht übereinstimmt:

  • Der TiNo geht direkt in den Kalibriermodus.

Da serielle Ports von Computer zu Computer verschieden sind gibt es eine Kommandozeilenoption für den Port. Die Baudrate für den Sender-TiNo ist 57600 Baud, für ein Gateway 230400 Baud. Für beide Konfigurationen kann das selbe Konfigurationstool verwendet werden.

Wichtiger Hinweis: Das tino2cal Tool ist mit Python 3.7 entwickelt und getestet worden, ist aber noch mit python 2.7 komtatibel.

Die Python Tools der TiNo Version 1 und TiNo2 sind untereinander nicht kompatibel! Firmware der Version 1 muss man mit dem Tool der Version 1 konfigurieren, Firmware der Version 2 und später mit dem tool tino2cal.

Wenn man tino2cal startet, öffnet es zunächst den seriellen Port. An einem FTDI Adapter (mit herausgefuehrter DTR Leitung) bewirkt das, dass der angeschlossene TiNo neu startet. Wer keinen Adapter mit DTR Leitung zur Verfügung hat, muss zum Neustart des TiNo die DTR Leitung kurz auf Masse legen und wieder freigeben. Dann wartet das Tool auf das 'CAL?' vom TiNo, und sendet ggf. das 'y' sofort zurück um den Kalibriermodus zu erzwingen. Sobald das Tool meldet dass man im Kalibriermodus ist, muss man das Passwort eingeben. Dies ist mit dem KEY Parameter im Source Code identisch. Derselbe KEY wird auch zum Verschlüsseln des HF Pakets benutzt. Das EEPROM ist verschlüsselt, weil sonst ein Dieb einen TiNo ohne weiteres komplett umkonfigurieren könnte und damit wild in der Gegend herumfunken kann (oder noch Schlimmeres anrichten kann), ohne dass er das Passwort kennen müsste.

Passwort eingeben:

  • entweder das in tino2cal hinterlegte Passwort verwenden: pwd<Enter> eingeben
  • oder manuell eingeben (muss aber immer mit dem kompilierten Passwort identisch sein): pw,<Passwort><Enter> eingeben

Nachdem das Tool "Pass OK" meldet, kann man mit dem Konfigurieren beginnen. Folgende Syntax wird von dem Tool verstanden: help listet die Optionen auf:

Kommando Beschreibung
exit terminate program
help or ? print this help text
c measure ADC and store in EEPROM.
copy or cp copy file content to EEPROM. syntax: cp,
cs verify checksum.
fe receive 10 packets from external source, calculate mean and store in EEPROM
g or get store eeprom content to file. Syntax: g(et),<filename>
ls Liste die EEPROM Konfigurationsdaten.
la Liste die Definitionen der Aktionen die der Node ausführen soll
m Messung der VCC mit Kalibrierung
quit beende tino2cal
read or r read from EEPROM. Syntax: r(ead),<addr>
ri read 16 bit integer from EEPROM. Syntax: ri(ead),<addr>
rf read float from EEPROM. Syntax: ri(ead),<addr>
s request checksum update and store in EEPROM.
t send a test RF packet
to start sending radio OOK signal
ts put radio into sleep mode
vddcal calibrate VCC measurement. Syntax: v(ddcal),<VCC at device in mV>
write or w write value to to EEPROM. Syntax: w(rite),<addr>,<value>
wf write float value to EEPROM. Syntax: wf,<addr>,<value>
wl write long int value to to EEPROM. Syntax: wl,<addr>,<value>, value format can be hex
wu write unsigned int value to EEPROM. Syntax: wu,<addr>,<value>
x exit calibration mode and continue with loop()

Das Tool ist ursprünglich interaktiv, d.h. man greift "manuell" auf das EEPROM zu und kann es so konfigurieren. Allerdings ist das nur bis zu einem bestimmten Grad praktisch, z.B. wenn man nur mal schnell eine ID ändern will, oder wenn man nur die Integrität des EEPROMs feststellen will. Um den Konfigurierungsprozess zu vereinfachen, kann man die Parameter in eine Textdatei schreiben, dort editieren und dann per cp-Befehl in das EEPROM hochladen. Man kann die wichtigsten Aktionen auch durch die Kommandozeile auslösen. Unterstützt werden zur Zeit folgende Optionen:

Option Beschreibung
-pwd Sende das im Tool hinterlegte Passwort
-cs lies die Prüfsumme vom EEPROM
-ls Liste der EEPROM Werte
-cp, Kopieren des Inhalts einer Konfigurationsdatei zum TiNo
-s berechnen und speichern der Prüfsumme
-x EEPROM verschlüsseln und Daten abspeichern
-q Tool beenden

eine Kommandozeile sieht dann beispielsweise so aus:

python tino2cal_v02.py COM8 57600 -pwd -cp,sensor_eeprom.cfg -ls -cs -x -q

In diesem Fall verbindet sich tino2cal mit dem TiNo2 Board auf COM8, 57600 Baud und arbeitet dann die Liste der Optionen in der Reihenfolge ab, also:

  1. -pwd sendet das im Programm hinterlegte Passwort an das TiNo2 Board
  2. -cp,sensor_eeprom.cfg kopiert den Inhalt der Datei sensor_eeprom.cfg vom PC auf das TiNo Board
  3. -ls listet den Inhalt des EEPROMs.
  4. -cs liest die Prüfsumme und prüft sie.
  5. -x verlässt den Kalibriermodus
  6. -q beendet das tino2cal

tino2cal funktioniert sowohl auf Windows (Python muss installiert sein), als auch auf dem Raspberry Pi (Linux).

EEPROM Speicher erklärt:

Diese Parameter sind derzeit im EEPROM gespeichert:

Parameter Wert Beschreibung
NODEID 0-255 die Identitfizierung des TiNo
NETWORKID 0-255 Identifizierung des Netzwerks, typisch 210 *)
GATEWAYID 0-255 Das Ziel (Gateway) zu dem Nachrichten gesendet werden
VCCatCAL typ. 3300 mV Wert der Versorgungsspannung in mV zum Zeitpunkt der Kalibrierung
VCCADC_CAL typ. 350 der ADC Wert der bei Anliegen von VCCatCAL kalibriert wurde
SENDDELAY 0 - 65535 Zeit in Sekunden/8 die zwischen zwei Messungen vergehen soll (Maximal 145 Stunden, ca 6 Tage). Bei einem Wert von 0 wird der RTC timer deaktiviert. **)
SENSORCONFIG 0-255 Sensor Konfigurierung
SENSORCONFIG.HTU21D 0 oder 1 HTU21D Sensor 0=inaktiv 1=aktiviert
SENSORCONFIG.DS18B20 0 oder 1 DS18B20 Sensor 0=inaktiv 1=aktiviert
SENSORCONFIG.BME280 0 oder 1 BME280 Sensor 0=inaktiv 1=aktiviert
SENSORCONFIG.SHT3X 0 oder 1 SHT3X Sensor 0=inaktiv 1=aktiviert
SENSORCONFIG.MAX31865 0 oder 1 MAX31865 Sensor 0=inaktiv 1=aktiviert
SENSORCONFIG.BRIGHTNESS 0 oder 1 LDR Sensor 0=inaktiv 1=aktiviert
SENSORCONFIG.SHTC3 0 oder 1 SHTC3 Sensor 0=inaktiv 1=aktiviert
SENSORCONFIG.SHT4X 0 oder 1 SHT4X Sensor 0=inaktiv 1=aktiviert
FREQ_CENTER z.B. 866.000 die genaue Mittenfrequenz des Senders (muss für das gesamte Netzwerk identisch sein)
TXPOWER 0-31 31 = maximale Sendeleistung, 0 = minimale Sendeleistung in 1dB Schritten
REQUESTACK 0 oder 1 legt fest ob ein empfangenes Telegramm quittiert werden soll (1) oder nicht (0)
LEDCOUNT 0 - 255 legt fest ob ein gesendetes Telegramm von einem kurzen Blinken der LED begleitet wird und wie oft * **)
LEDPIN 0, 19 Pin an dem die LED hängt (beim TiNo2 Pin 19). Bei einem Wert von Null wird die LED gar nicht verwendet.
PIRDATAPIN -1 -25 DATA Pin des Bewegungsmelders. -1 = PIR inaktiv
PIRDEADTIME Totzeit des Bewegungsmelders nach dem Auslösen in Sekunden/8
RXPIN 0 ohne Bedeutung.
RTDPOWERPIN 0-25 VCC Pin des MAX31865 (PT100)
RTDCSPIN 0-25 Chip Select Pin des MAX31865 (PT100)
ONEWIREPOWERPIN 0-25 VCC Pin des DS18B20
ONEWIREDATAPIN 0-25 DATA Pin des DS18B20
I2CPOWERPIN 0- 25 normalerweise 25. Pin der für die VCC der I2C Komponenten verwendet wird
PCI0PIN 0 -25, -1 Pin der für den Interrupt PCI0 benutzt wird. -1 = PCI0 inaktiv
PCI0CONFIG.TRIGGER 2,3,4 Triggerart des Interrupts. Wird unten erklärt
PCI0CONFIG.MODE 0,2 Pin Modus. 0=INPUT 2=INPUT_PULLUP
PCI0GATEWAYID 0-255 Gateway zu dem die Nachricht bei Ausloesen des Interrupts gesendet wird (normalerweise GATEWAYID)
PCI1PIN 0 -25, -1 ein nicht benutzter externer Interrupt wird mit einem Wert < 0 angezeigt. Dieser Pin wird mit dem Bewegungsmelder geteilt. -1 = PCI1 inaktiv
PCI1GATEWAYID 0-255 Gateway zu dem die Nachricht bei Ausloesen des Interrupts gesendet wird (normalerweise GATEWAYID)
PCI1CONFIG.TRIGGER 2,3,4
PCI1CONFIG.MODE 0,2 0=INPUT 2=INPUT_PULLUP
PCI2PIN 0 -25, -1 -1 = PCI2 inaktiv
PCI2CONFIG.TRIGGER 2,3,4
PCI2CONFIG.MODE 0,2
PCI2GATEWAYID 0-255 Gateway zu dem die Nachricht bei Ausloesen des Interrupts gesendet wird (normalerweise GATEWAYID)
PCI3PIN 0 -25, -1 -1 = PCI3 inaktiv
PCI3CONFIG.TRIGGER 2,3,4
PCI3CONFIG.MODE 0,2 0=INPUT 2=INPUT_PULLUP
PCI3GATEWAYID 0-255 Gateway zu dem die Nachricht bei Ausloesen des Interrupts gesendet wird (normalerweise GATEWAYID)
USE_CRYSTAL_RTC 0 oder 1 0 = interner ULPO , 1= externer Quarz wird benutzt im Ruhemodus
ENCRYPTION_ENABLE 0 oder 1 legt fest ob das Telegramm verschlüsselt werden soll
FEC_ENABLE 0 oder 1 legt fest ob Forward Error Correction eingesetzt werden soll
INTERLEAVER_ENABLE 0 oder 1 legt fest ob ein Interleaver zum Einsatz kommt.
EEPROM_VERSION_NUMBER auto nicht editieren! wird vom Sketch eingetragen
SOFTWAREVERSION_NUMBER auto nicht editieren! wird vom Sketch eingetragen
TXGAUSS_SHAPING 0,1,2,3 normalerweise 0. Legt fest ob und mit welchem BT Gauss Shaping vorgenommen wird (fortgeschritten)
SERIAL_ENABLE 0 oder 1 normal 1. legt fest ob standardmässig der Serielle Port aktiviert sein soll
IS_RFM69HW 1 0 : es handelt sich um einen RFM69CW. 1: es handelt sich um einen RFM69HCW. Bei TiNo2 immer 1
PABOOST 0, 1, 2, 3 normalerweise 0. nur für RFM69HCW: legt die High-Power Parameter fest (fortgeschritten)
FDEV_STEPS +/- Frequenzkorrektur bei Raumtemperatur (einfache Kalibrierung des 32 MHz Quarzes des RFM)
CHECKSUM auto wird beim Konfigurieren berechnet und dann eingetragen (Option 's')

*) 210 ist um mit dem RFM12B Modul kompatibel zu sein. Wert kann bei diesem Modul nicht geändert werden.

**) Wird SENDELAY=0 gesetzt, wird der Timer deaktiviert und der Sleep Modus des Prozessors aktiviert. Dieser wacht jetzt nur noch bei externen Interrupts ("PCI") auf.

  • **) Da die LED eigentlich nicht gebraucht wird und nur zum Test einer einwandfreien Funktion dient, kann eingestellt werden ob die LED beim Versenden eines Telegramms aufleuchten soll. Eine Zahl > 0 stellt ein bei wie vielen Telegrammen nach dem Start die LED noch blinken soll. Normalerweise auf 1 gesetzt.

PCI Trigger Byte Bitbelegung:

Konfigurations Register PCIxCONFIGsetzt sich aus 2 Paramtern zusammen:

x  x  x  m  m  t  t  t
         |  |  |  |  |___ TRIGGER BIT 0
         |  |  |  |_______TRIGGER BIT 1
         |  |  |__________TRIGGER BIT 2
         |  |_____________MODE BIT 0
         |________________MODE BIT 1

PCIxCONFIG.TRIGGER

Bedeutung Wert Bits 0-2
LOW 0 0b000
CHANGE 4 0b100
FALLING 2 0b010 (Normaleinstellung)
RISING 3 0b011 (Einstellung für PIR)

PCIxCONFIG.MODE

Bedeutung Bedeutung Bits 0-1
INPUT 0 0b00
INPUT_PULLUP 2 0b10 (Normaleinstellung)

Beispiel: 0b00010010 = 0x012 - 18 (Dec) = INPUT_PULLUP und FALLING Dies ist die Normaleinstellung. Der interne Pullup ist Teil der Entprellschaltung mit einem externen Widerstand und einem Kondensator.

---> Bild mit Entprellungsschaltung <----

Back to Top

Nachbau

Aufgrund der überschaubaren Stückliste und des einfachen Aufbaus ist der Nachbau einfach, ein wenig Lötfertigkeit vorausgesetzt.

Vorausetzungen: Was braucht man?

Hardware

  • USB-Seriell Adapter (FTDI oder kompatibel, CH340 geht auch aber auf das Pinning achten!, und immer den Jumper oder den Schalter auf 3.3V einstellen!)
  • UDPI-Programmer
  • Gateway: etwas das einen seriellen Port öffnen, lesen, schreiben, anzeigen und speichern kann (PC, Raspberry Pi, ESP8266,...)
  • Lötkolben und Zubehör. Es sollte ein feiner Lötkolben für Elektronik sein, nicht gerade einer der mit Gas betrieben wird.

Software

  • Python (am Raspberry Pi bereits vorinstalliert)
  • Arduino IDE

Leiterplatten

Die Leiterplatten bestelle ich gerne bei seeedstudio. Das dauert zwar 3 Wochen von der Bestellung bis zur Lieferung, dafür ist die Qualität aber sehr gut zum vernünftigen Preis. Die Layouts wurden mit Autodesk Eagle entworfen und sind hier hinterlegt.

Mechanik (Gehäuse)

Die Leiterplatte verwendet die RFM69HCW bzw. RFM95 Pinbelegung und ist für das Strapubox SP2043 Gehäuse konzipiert. Damit kann man auch einen LoRa Node verwirklichen, entsprechende Software gibt es passend im Netz.

Elektronik

Schaltplan

Das Besondere am TiNo ist dass die Schaltung wirklich nicht kompliziert ist.

Das Herzstück ist der Mikroprozessor mit dem HF Modul. Das HF Modul kommuniziert über den SPI Bus. Ausserdem benutzt der Treiber einen Interrupt an GPIO D14, der auslöst wenn Daten empfangen werden. Derselbe GPIO D14 wird auch benutzt um das Ende einer Sendesequenz zu signalisieren.

Optional kann der Prozessor im Sleep Modus mit einem externen Uhrenquarz (32.768 KHz) bestückt werden. Der Quarz benötigt noch zwei Lastkondensatoren von je 6pF oder 12pF, je nach Spezifikation des Quarzes.

Bei der Inbetriebnahme und zum Testen ist eine LED unglaublich hilfreich. Diese wird an GPIO D19 angeschlossen. je nach TiNo Boardausführung kann die LED in SMD und/oder bedrahteter Bauform eingesetzt werden.

Der Bequemlichkeit halber gibt es einen FTDI Adapter. Das Pinout des Adapters ist mit der Pinbelegung eines Arduino Pro Mini identisch, deshalb gibt es auch jede Menge USB-TTL Konverter im Netz mit genau diesem Pinout.

Der I2C Bus wird auf den GPIO Ports 2 (SCL) und 3(SCK) angeschlossen. I2C Bus Komponenten werden durch GPIO D25 versorgt, damit sie im Sleep Modus keinen Strom verbrauchen. Beide Leitungen des I2C Busses brauchen Pullup Widerstände.

Stückliste

Die Preise für Bauteile schwanken stark. Die angegebenen Preise wurden Anfang 2024 erhoben und sind nur als Anhaltspunkt zu verstehen.

Bauteil Preis Bemerkung
Leiterplatte ca. 1.00 EUR je nach Bestellmenge
ATmega4808 ca. 1.80 EUR
RFM69CW ca. 2.00 EUR
SHTC3 Sensor ca. 1.00 EUR je nach Menge. Einzelpreis 2.50
Gehäuse ca. 0.70 - 1.20 je nach Typ
Batteriehalter 0.20
Kleinteile 0.10 Widerstände, Kondensatoren, LED in SMD Bauform *)

*)Ich habe darauf geachtet dass man nicht allzu viele verschiedene Werte benoetigt.