Forum: Mikrocontroller und Digitale Elektronik Kombination von ATtiny84A, RFM69CW, BME280 - möglich?


von Christian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich bin neu im Gebiet der Mikrocontroller und auch meine Kenntnisse in C 
sind auf Anfänger-Niveau (ich weiß, schlechte Kombination).

Trotzdem möchte ich mich an einer Wetterstation versuchen. Dafür arbeite 
ich mit folgenden Komponenten:
-) Funkmodul RFM69CW, 868 MHz
-) Mikrocontroller ATtiny84A
-) Sensor BME280
..zudem kommen noch Fotowiderstand, Keramikkondensatoren, 2x Batterien 
AA und was man sonst noch so braucht

Als ich mir die ATtiny84A gekauft habe, war ich der Meinung das ich SPI 
für das Funkmodul und I2C für den Sensor verwenden kann. Dann kam leider 
die Ernüchterung: die zwei (SPI & I2C) belegen die gleichen Pins am 
Mikrocontroller!
Gibt es hierfür eine Lösung oder hab ich mich für den falschen 
Mikrocontroller entschieden? Ich hab den Begriff "SoftwareSPI" in Google 
gefunden und schon Tutorials gelesen, jedoch weiß ich nicht wie es 
umzusetzen/einzubinden ist (Erinnerung: bin Anfänger).

Was bereits funktioniert:
Mikrocontroller mit Funkmodul und Fotowiderstand klappt, sowohl senden 
als auch empfangen am RaspberryPi (über UART). Den ATtiny84A 
programmiere (ist das das richtige Wort?) ich direkt am Pi über Arduino 
IDE

Was ich noch brauche/möchte:
+) Sensordaten vom BME280 auslesen (Kommunikation zwischen ATtiny84A & 
BME280)
+) aktuelle Spannung der Batterien auszulesen
+) speichern der empfangenen Daten in einer Datenbank am Pi (vermutlich 
MariaDB)

Libraries die ich verwende:
https://github.com/jcw/jeelib.git (Mikrocontroller & Funkmodul)
https://github.com/BoschSensortec/BME280_driver (jedoch Version v3.3.0)

Achja:
-) ich hab schon gefühlte 20 unterschiedliche BME280 Veröffenlichungen 
getestet ... bis ich mich für die noch gewartete 
"Direkt-vom-Hersteller"-Variante entschieden habe.
-) Datum bei Foto und Code sind vom letzten Jahr ... das liegt daran, 
dass ich mich übern kompletten Sommer/Herbst so sehr reingesteigert 
habe, das ich eine Auszeit gebraucht habe


Entscheidet ist für mich einmal eine Antwort auf die Frage: ist es 
überhaupt möglich die 3 Komponenten (RFM69CW, ATtiny84A, BME280) zum 
funktionieren zu bekommen?

Schöne Grüße
Christian

von Max D. (max_d)


Lesenswert?

Geht problemlos.
Du kannst zb das rfm am hw spi hängen lassen und das i2c in Software 
machen (das usi bei den tinys ist eh nur mäßig hilfreich bei einem i2c 
Master).

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

... ja geht, aber!

ich würde umsteigen auf 328p, den fotowiderstand in die tonne, rtc hinzu 
und am local sensor ein kleines oled um bei bedarf die daten zu sehen.

der fotowiderstand+schaltung+berechnung braucht wahrscheinlich mehr 
strom als ein BH1750 und der 328p ist mit seinen resourcen und den 
unendlichen wettersensor beispielen die du findest, wesentlich 
entspannter zu programmieren.

die hw spi/i2s pins lassen sich auch im time sharing betreiben, sprich 
BME280/RFM69CW hängen parallel an clk/data und du fährst dann nur 
unterschiedliche protokolle. du musst das nur sw technisch sauber 
behandeln!

kollision auf der datat line ist nicht gegeben, weil default immer als 
input und ansonsten protokoll/commando's zum daten senden verschieden 
sind.


mt

von Christian (Gast)


Lesenswert?

Zuerst ein DANKE an euch beide für die ermunterten Worte! :)

@Apollo Mond: Danke für den Tipp, ich möchte jedoch meine 
vorhandenen/gekauften Komponenten gerne verwenden.

@Max D.: könntest du mir deinen Lösungsweg genauer erklären? kennst du 
vielleicht eine GIT-Bibliothek womit man das I2C in Software macht, 
geeignet fürn ATtiny84A? oder vielleicht einen Verkabelungsplan?

Ich hätte halt gerne die Gewissheit das zumindest ein Teil, 
Programmierung oder Verkabelung, mit Sicherheit stimmt ...

von c-hater (Gast)


Lesenswert?

Christian schrieb:

> @Max D.: könntest du mir deinen Lösungsweg genauer erklären? kennst du
> vielleicht eine GIT-Bibliothek womit man das I2C in Software macht,
> geeignet fürn ATtiny84A? oder vielleicht einen Verkabelungsplan?

Du begreifst garnix. Wenn man es in Software macht, braucht man keinen 
Verkabelungsplan, weil dann jeder Pin für jedes I2C-Signal genutzt 
werden kann.
Man schnappt sich einfach zwei freie Pins und sagt der Software, dass 
sie genau diese benutzen soll. Und da man das selber festlegt, sollte 
man auch in der Lage sein, selber einen Plan für die Verkabelung zu 
machen...

> Ich hätte halt gerne die Gewissheit das zumindest ein Teil,
> Programmierung oder Verkabelung, mit Sicherheit stimmt ...

Nachdem du jetzt gelernt hast, dass du die volle Kontrolle über die 
Verkabelung ausübst, wenn du die Sache in Software implementierst, 
brauchst du jetzt nur noch eine passende Software schreiben oder 
"raubkopieren". Wenn's nicht mal zu letzterem reicht: Such' dir ein 
anderes Hobby. Briefmarkensammeln ist auch ganz nett...

von Max D. (max_d)


Lesenswert?


von Wolfgang (Gast)


Lesenswert?

Christian schrieb:
> Als ich mir die ATtiny84A gekauft habe, war ich der Meinung das ich SPI
> für das Funkmodul und I2C für den Sensor verwenden kann. Dann kam leider
> die Ernüchterung: die zwei (SPI & I2C) belegen die gleichen Pins am
> Mikrocontroller!

Warum verwendest du für den Sensor nicht auch SPI?
Zitat aus dem Datenblatt des BME280:
"The sensor provides both SPI and I²C interfaces"

von AVR-Bastler (Gast)


Lesenswert?

Hatte ich auch schon mal versucht, es geht vom Prinzip her, aber die 8K 
Speicher im ATtiny84A reichten nicht für die ganzen Libraries vom 
JeeLib, Sensor usw, gerade wenn Sensordaten noch im ATtiny84A berechnet 
werden sollten.

Habe dann einen ATmega328P verwendet, was die Sachen vereinfachte.

von Christian (Gast)


Lesenswert?

Max, danke für den Link. Werde mich daran versuchen! Sollte es nicht 
klappen hat mir AVR-Bastler ja eine alternative empfohlen :)

@Wolfgang willst du auf was bestimmtes hinaus? (zB SoftwareSPI?)

von daniu (Gast)


Lesenswert?

Hi,

ist hier noch was passiert?

Ich betreibe mittlerweile nodes mit RFM69CW und HTU21d auf einer TinyTX 
Platine (Nathan Chantrell). Prinzipiell würde ich sehr gerne auch den 
BME280 verwenden. (Ich finde den kleinen Attiny84 durchaus interessant 
und habe noch jede Menge dieser tinytx3 Platinen)
Bisher scheitert das allerdings daran, dass der Speicher vom Attiny 
anscheinend zu klein für die Bibliothek des BME280 zu sein scheint.

Was mir ein bisschen Hoffnung gemacht hat, war dieser thread: 
Beitrag "Bosch BMP280: Umrechnungen vereinfachen?" (Bosch BMP280: Umrechnungen 
vereinfachen). Vielleicht geht das beim BME280 ähnlich?

Leider sollte ich mich wohl nach Meinung mindestens eines Mitgleids 
dieses Forums eher mit Briefmarken sammeln beschäftigen. Ich fürchte, 
ich werde die Übertragung vom BMP280 nicht ohne weiteres auf den BME280 
hinbekommen. Dürfte ja aber nicht nur für mich interessant sein ...

Grüße

von Peter D. (peda)


Lesenswert?

Christian schrieb:
> Gibt es hierfür eine Lösung oder hab ich mich für den falschen
> Mikrocontroller entschieden? Ich hab den Begriff "SoftwareSPI" in Google
> gefunden und schon Tutorials gelesen, jedoch weiß ich nicht wie es
> umzusetzen/einzubinden ist (Erinnerung: bin Anfänger).

Ich hab mal in den BME280 Link geschaut, da wird float verwendet, das 
belegt einmalig 1kB. Mehr als 2kB sollten es daher nicht sein.

Beim Funkmodul hängt es hauptsächlich vom Protokoll ab, wieviel Flash da 
verbraten wird, aber 6kB sollten ja reichen.

Ich würde SPI für beides benutzen, das spart etwas Code. Das USI ist eh 
nicht gut als SPI oder I2C zu gebrauchen. Nimm daher einfach SW-SPI 
(~20Byte).
Ein SW-SPI macht nur Byte lesen/schreiben. Du mußt also die Pakete lt. 
Datenblatt aus Bytes zusammen setzen und mit /CS=low bzw. high 
einrahmen.


Ich würde als Anfänger aber nicht mit derart komplexen Projekten 
anfangen, vermutlich verstehst Du nichtmal die Datenblätter der 
Bauteile.

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.