Forum: Mikrocontroller und Digitale Elektronik ATtiny85 benötige Taster und kein freier Port


von Dietmar S. (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe ein 4-fach-Thermometer mit ATtiny85 aufgebaut

Nach dieser Bauanleitung: http://www.technoblogy.com/show?1MP7
Programm: http://www.technoblogy.com/list?1XGS

Jetzt würde ich noch gerne einen Taster einbauen und den Zustand beim 
Programmstart abfragen.

Vielleicht kann mir jemand helfen, wie ich das mache. Ich erwarte keinen 
fertigen Code. Nur ein paar Tipps und eine Idee, wie ich den Taster 
anschließe, da ich keine freien Ports mehr habe. Vielleicht lässt sich 
einer, der mit dem Display verbunden ist, doppelt belegen?

Den Code könnte ich am Programmanfang einfügen. Es würde mir also völlig 
ausreichen, den Taster beim Programmstart kurz gedrückt zu halten. Wenn 
er gedrückt wurde, soll das EEprom gelöscht werden (die 
EEprom-Lösch-Funktion ist bereits im vorhandenen Code enthalten)

Sorry, das ist mein erstes AVR-Projekt und ich bin schon stolz es 
überhaupt zum Laufen bekommen zu haben und sogar die Ursache gefunden zu 
haben, warum der erste Sensor nicht erkannt wird.

Warum ich das will:

Die Sensoren müssen nacheinander angelernt werden. Dabei werden die 
Seriennummern ins EEprom geschrieben. Damit sich der Sketch hochladen 
lässt muss ich aber den Pullupwiderstand entfernen. Dann funktionieren 
aber die Sensoren nicht und da der Sketch nach dem Hochladen automatisch 
gestart wird, wird irgendein Müll ins EEprom geschrieben und der erste 
Sensor dann nicht mehr erkannt (siehe Foto, das "X").

Um das EEprom wieder zu löschen kommentiert man im Code eine Zeile aus 
und startet den Sketch einmal. Danach muss man den wieder zurück 
geänderten Sketch abermals hochladen. Total umständlich und ich drehe 
mich wegen des ersten Sensors im Kreis.

Deshalb wäre es sinnvoll das EEprom einfach über einen Taster löschen zu 
können, um den Anlernprozess für die Sensoren erneut in Gang zu setzen.

von Gerald K. (geku)


Lesenswert?

Ich würde mit dem Taste P4 gegen Masse schalten. Einzig beim Betätigen 
des Tasters funktioniert das Pollen der Temperatursensoren nicht. Ich 
denke das kann man verschmerzen.

Das Display wird in seiner Funktion nicht beeinträchtigt und man kann 
dieses während des Tastendruckes verwenden.

: Bearbeitet durch User
von S. Landolt (Gast)


Lesenswert?

> keine freien Ports mehr
'NRES P5' scheint doch frei zu sein, oder? Das ist ADC0, wenn der Taster 
diesen auf, sagen wir, 0.9 Vcc zieht, sollte sich das abfragen lassen. 
Irgendwie.

von HildeK (Gast)


Lesenswert?

S. Landolt schrieb:
> 'NRES P5' scheint doch frei zu sein, oder? Das ist ADC0, wenn der Taster
> diesen auf, sagen wir, 0.9 Vcc zieht, sollte sich das abfragen lassen.
> Irgendwie.

Wenn man Serial-HV programmieren kann, dann einfach den nRES als PB5 
dafür verwenden.
Mit dem ADC0 kann es auch gehen, aber nicht beim Ziehen auf 0.9V, dann 
macht er doch Reset? Du meintest sicherlich auf 0.9×VCC!

von S. Landolt (Gast)


Lesenswert?

an HildeK:
Ich benutzte die Schreibweise aus dem Datenblatt - aber okay, wenn Sie 
so wollen, ein '*' dazwischen kann nicht schaden.

von Joachim B. (jar)


Lesenswert?

Gerald K. schrieb:
> Ich würde mit dem Taste P4 gegen Masse schalten. Einzig beim Betätigen
> des Tasters funktioniert das Pollen der Temperatursensoren nicht. Ich
> denke das kann man verschmerzen.

gefällt mir, ich würde CS mit D/C verknüpfen UND/!UND, wenn kein CS 
aktiv ist kann die D/C Leitung genutzt werden!

Ich weiss gerade nicht ob CS high oder low aktiv ist!

Ohne CS sind die OLED Leitungen ja nutzbar.

von Einer K. (Gast)


Lesenswert?

Da das ein Digispark/Digistump Klon ist, hat er einen Bootloader.
Üblicherweise ist bei den originalen Digistump der Reset disabled.
Also auch hier machbar, PB5 ist dann als IO nutzbar.

von Hummel (Gast)


Lesenswert?

HildeK schrieb:
> S. Landolt schrieb:
>> 'NRES P5' scheint doch frei zu sein, oder? Das ist ADC0, wenn der Taster
>> diesen auf, sagen wir, 0.9 Vcc zieht, sollte sich das abfragen lassen.
>> Irgendwie.
>
> Wenn man Serial-HV programmieren kann, dann einfach den nRES als PB5
> dafür verwenden.
> Mit dem ADC0 kann es auch gehen, aber nicht beim Ziehen auf 0.9V, dann
> macht er doch Reset? Du meintest sicherlich auf 0.9×VCC!

Zum Programmieren soll ja die USB Schnittstelle nutzbar sein, so habe 
ich das verstanden. Also kein ISP.

Ich würde auch P5 nehmen, und mit Spannungsteiler auf z.B. 4 Volt legen. 
Der Taster überbrückt den oberen Widerstand und zieht den Pin auf 5 
Volt. Damit ist es egal ob der Reset enabled oder disabled ist.
Die Spannung an P5 kann man während Init messen und als Entscheidung für 
das Löschen des EEPROMs nehmen.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

falls wirklich kein Pin mehr frei ist, könnte man P0 und/oder P1 
verwenden. Das ist nur die Clock und Mosi Leitung vom Display. Daran 
klemmst du deinen Taster mit Pullup/Down ran.

Im Programm machst du folgendes. Du legst zuerst die CS Leitung auf 
High. Damit ist das Display "abgeklemmt". Danach konfigurierst du P0/P1 
als Eingang für deinen Taster, fragst den ab und machst dein Ding damit.

Danach initialisierst du deine SPI Schnittstelle und damit das Display.
Der Taster darf ab jetzt nicht mehr betätigt werden. Im schlimmsten Fall 
zeigt das Display Müll an und müßte neu initialisiert werden. Könnte man 
theoretisch mit dem Taster einbauen. Bei "späterer" Betätigung 
Displayinit. Dann bleibt eine Berührung ohne Folgen.

von Joachim B. (jar)


Lesenswert?

Veit D. schrieb:
> Im Programm machst du folgendes. Du legst zuerst die CS Leitung auf
> High.

mein Vorschlag und das kann sogar mit Gatter verknüpft werden und mein 
"hater" hat wieder zugeschlagen.

von Gerald K. (geku)


Lesenswert?

Joachim B. schrieb:
> gefällt mir, ich würde CS mit D/C verknüpfen UND/!UND, wenn kein CS
> aktiv ist kann die D/C Leitung genutzt werden!
>
> Ich weiss gerade nicht ob CS high oder low aktiv ist!
>
> Ohne CS sind die OLED Leitungen ja nutzbar.

Würde ich nicht so kompliziert lösen, den die Anschalten sollte "Open 
Collector" oder ein Kontakt sein. Der Schalter beeinflusst die Funktion 
nicht negativ. Selbst wenn er zwischendurch nur kurz gedrückt wird gehen 
eine Polls verloren. Was soll's. Ich hoffe bei der Übertragung von den 
Sensoren werden Telegramme mit einen CRC gesichert. Dann sollte man ich 
zerstörte Telegramme erkennen. Wenn nicht macht man eine 
Mehrfachabtastung.

von MaWin (Gast)


Lesenswert?

Dietmar S. schrieb:
> da ich keine freien Ports mehr habe

Warum nimmt man dann einen Tiny85 ?

von Martin H. (horo)


Lesenswert?

Arduino Fanboy D. schrieb:
> Üblicherweise ist bei den originalen Digistump der Reset disabled.

Und bei den 2-3 €/$ Angeboten ist der Reset typischerweise enabled - 
meiner Meinung nach der sinnvollere Zustand, denn bei Bedarf kann man 
(einmalig) per SPI den Reset disablen; zurück dann nur per HV.

von Joachim B. (jar)


Lesenswert?

Gerald K. schrieb:
> Würde ich nicht so kompliziert lösen

und ich würde die logisch verknüpfen um sie zu entprellen, oder eben im 
IRQ auszulagern.
Man muss ja nicht immer Daten ans OLED senden, mehr als 4-10 
Aktualisierungen kann eh keiner LESEN und in der OLED Print Ausgabe kann 
ich hinterher auch den Taster einlesen.

von HildeK (Gast)


Lesenswert?

S. Landolt schrieb:
> Ich benutzte die Schreibweise aus dem Datenblatt - aber okay, wenn Sie
> so wollen, ein '*' dazwischen kann nicht schaden.

Entschuldigung, da hatte ich nicht genau genug gelesen. 0.9V ≠ 0.9VCC. 
Mein Fehler.

von S. Landolt (Gast)


Lesenswert?

Kein Problem - wir beide kennen uns doch.

von Ralph S. (jjflash)


Lesenswert?

So, muß ich auch mal meinen Senf dazugeben:
 Ein
grundsätzlich lasst ihr Euch über den PB5 aus, der eben auch als /Reset 
fungiert.

Prinzipiell - egal ob der Chip nun einen Bootloader hat oder nicht - ist 
es nicht unbedingt eine gute Idee, den Pin, der eine ISP ermöglicht, zu 
deaktivieren. Hiermit ist man - im Falle eines Bootloaders - auf Gedeih 
und Verderb diesem ausgeliefert (oder einem "High-Voltage" Programmer).

Sieht man sich die Schaltung an, gibt es doch noch eine andere, aus 
meiner Sicht der Dinge viel bessere; Lösung:

- Das Display (wieso hat der TO hier ein SPI Display und kein I2C 
Display gewählt ?) hängt am SPI Bus gänzlich alleine, weitere SPI 
Einheiten gibt es auch nicht. Sollte jetzt nicht zwingend Strom gespart 
werden, kann man den CS des Displays dauerhaft auf GND legen, somit ist 
das Display IMMER aktiv und der Pin PB3 / ADC3 ist damit komplett frei 
für anderes, eben auch für einen Taster abfragen.

Da dieser PIN auch grundsätzlich noch als analoger Eingang fungieren 
kann, kann man über diesen Pin gleich mehrere Taster abfragen, in dem 
man "einfach" dort die Spannung mißt:
1
    +5V
2
     ^
3
     |
4
     +-------+-------+
5
     |       |       |
6
    .-.     .-.     .-.
7
10k | | 22k | | 33k | |
8
    | |     | |     | |
9
    '-'     '-'     '-'
10
     |       |       |
11
     |       |       |
12
 S1 \    S2 \    S3 \
13
     \       \       \
14
     |       |       |
15
     +-------+-------+------o PB3
16
                     |
17
                    .-.
18
                    | |
19
                10k | |
20
                    '-'
21
                     |
22
                     |
23
                    ---
Zu messende Spannungen sollten hier UNGEFÄR sein: 1/2 Ub, 1/3 Ub, 1/4 
Ub.

Kann von einer einfachen Tastenabfrage ausgegangen werden und man 
bestimmt, dass mehrere Tasten nicht gleichzeitig betätigt sein dürfen 
(ich möchte das hier nur als Anregung aufführen) kann man den 
schaltbaren Spannungsteiler annehmen mit:
1
Spannung bei Vdd= 5V
2
----------------------------
3
1/3 .. 1/2 ==> 2.075V  = S1
4
1/4 .. 1/3 ==>  1.45V  = S2
5
0   .. 1/4 ==>  0.62V  = S3

Um nun keine Integer - Floatumrechnung machen zu müssen sind für obige 
Spannungen anzunehmen, dass bei ADC-Werten (10 Bit Auflösung) folgende 
Zuordnung gilt:
1
ADC-Wert > 424       ==> S1 gedrückt
2
300 < ADC-Wert < 424 ==> S2 gedrückt
3
128 < ADC-Wert < 300 ==> S3 gedrückt
4
ADC-Wert < 128       ==> nichts gedrückt

von Ein Freund (Gast)


Lesenswert?

MaWin schrieb:
> Warum nimmt man dann einen Tiny85 ?

Genau das frage ich mich auch :-) muss wohl etwas mit erhöhter 
Leidensfähigkeit (positiv ausgedrückt) zu tun haben.

von Ralph S. (jjflash)


Lesenswert?

: - ) ... und ja ich weiß: es wird richtig geschrieben: UNGEFÄHR ..

von Veit D. (devil-elec)


Lesenswert?

Hallo,

man darf /CS nicht dauerhaft auf Low legen. SPI benötigt immer die CS 
Signalflanken.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

MaWin schrieb:
> Warum nimmt man dann einen Tiny85 ?

Weil der TO das Programm für einen Tiny85 "gefunden" hat, Links sehe 
Eröffnungsbeitrag.

Diese Tatsache allein garantiert nicht, dass der TO das auf einen 
anderen µC umschreiben kann.

von Joachim B. (jar)


Lesenswert?

Veit D. schrieb:
> Hallo,
>
> man darf /CS nicht dauerhaft auf Low legen.

wer will das?
Habe ich nirgendwo gelesen.

Man darf doch CS nutzen wenn er frei und unbelegt ist.
Im Gegensatz zum /Reset Pin, dort würde ich keinen Taster anschliessen, 
obwohl der Reset auch als Port gebraucht werden kann, mit dem Verlust 
der Programmierfunktion.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

schau dir mal die Arbeitsweise von SPI vorallendingen Daisy Chain an. 
Das verdeutlicht es. Mit CS low werden die Bits (Daten und Kommandos) 
nur durchgeschoben. Erst mit CS low>high weiß das SPI Device das es die 
vorliegenden Daten im eigenen Schieberegister übernehmen und verarbeiten 
kann/darf. Vorher liegen die Bits nur rum ohne das sie angefasst werden.

Vergleich. Der Postbote rennt wild durch deine Straße. Erst wenn er bei 
dir klingelt, merkst du, du hast neue Post.

: Bearbeitet durch User
von Dietmar S. (Gast)


Lesenswert?

Uih, danke für die vielen tollen Lösungsansätze. Wenn sich der Resetpin 
als Port nutzen lässt, wäre das ja die einfachste Lösung. Aber ich will 
mir erst mal alle Beiträge durchlesen.

von Veit D. (devil-elec)


Lesenswert?

Dietmar S. schrieb:
> Wenn sich der Resetpin als Port nutzen lässt, wäre das ja die einfachste Lösung.

Alles andere aber das genau eben nicht machen!

von Hummel (Gast)


Lesenswert?

Dietmar S. schrieb:
> Uih, danke für die vielen tollen Lösungsansätze. Wenn sich der Resetpin
> als Port nutzen lässt, wäre das ja die einfachste Lösung. Aber ich will
> mir erst mal alle Beiträge durchlesen.

Geht nicht als normaler Port mit High/Low Eingang oder Ausgang. Du 
kannst den Pin aber als Analog Eingang verwenden, musst aber dafür 
sorgen, daß die Spannung nie in den Bereich von logisch Low geht. Da das 
einen Reset auslösen würde.

Schau einfach mal in diesen Thread rein:
https://www.avrfreaks.net/forum/attiny85-pin-1-reset-and-pb5-functionality

von Einer K. (Gast)


Lesenswert?

Veit D. schrieb:
> Alles andere aber das genau eben nicht machen!

So krass muss man das nicht sehen.

Erstens ist da ja ein Bootloader drauf.
Lässt sich also weiterhin problemlos programmieren.

Zweitens kommt man da per HVSP immer noch ran, um die Fuses 
zurückzusetzen.
Auf dem Board ist der Tiny gesteckt.

von Dietmar S. (Gast)


Lesenswert?

Noch als Anmerkung, warum ich das so aufgebaut habe. Ich habe eine 
Anleitung zu einem erprobten Projekt genommen. Wie schon erwähnt, wollte 
ich erste Erfahrungen sammeln und da ich gerade Bedarf an solch einem 
Thermometer hab, dachte ich das ist ein gutes Projekt für den Anfang und 
das hat sich auch als gute Idee herausgestellt. Hätte ich selbst was 
programmiert, hätte ich bis jetzt sicher noch kein einzelnes Zeichen auf 
das Display bekommen. Gut, die LED hab ich natürlich zum blinken 
bekommen, aber das ist ja auch keine große Kunst. Mit diesem fertigen 
Projekt kann ich jedoch prima im funktionierenden Code rumbasteln und 
ausprobieren.

von Harald (Gast)


Lesenswert?

Das 0.96“ Display gibt es doch auch als I2C Variante, oder? Wäre nur ein 
Austausch/Konfiguration der Lib. Bitte ignorieren, sollte sich 
diesbezüglich etwas überlesen haben.

von Armin J. (arminj)


Lesenswert?

Mal ne blöde Frage.
Das Problem ist doch, dass die Sensoren angelernt werden und dass das so 
schnell nach dem Programmieren geht, dass man man keine Zeit hat, das 
Teil stromlos zu machen und den Widerstand wieder anzulöten.
Wie wäre es denn mit ein paar Gedenksekunden an Anfang des setups?
so einfach mal delay(10000), und schon ist das Problem gelöst oder sehe 
ich da was falsch?

von Harald (Gast)


Lesenswert?

Sehe gerade, manche Displays lassen sich sogar per Jumper zwischen I2C 
und SPI umstellen. Schon wären sogar zwei Pins frei.

von dirk (Gast)


Lesenswert?

Gruss zum Abend und Advent

Veit D. schrieb:
> Dietmar S. schrieb:
>> Wenn sich der Resetpin als Port nutzen lässt, wäre das ja die einfachste
>> Lösung.
>
> Alles andere aber das genau eben nicht machen!

Dem schließe ich mich an.

Das beinhaltet eine Verkomplizierung im Anfänglichen
bei Weiterem oder ohne wäre es egal. Selbst bei Profis ist der Umstand 
wie kommt man wieder an den AVR bz. Glatteis, hier im Forum schon 
reichlich dargestellt.
Wie erwähnt HV Programmierung,
und das was man da im Internet findet
, es gibt auch statistische Aussagen zum relativen Abschuss der AVR s 
(Fuses u. ), ist nicht unbedingt
richtig, da musste ich auch erst dazu lernen.

Je nach Anforderung/en den Attiny
/Atmega mit der Anzahl der Pins entspechend auswählen,
ohne Klimmzüge oder man kanns.
Als Anfänger wurde ich die übersichtliche Einfachheit bevorzugen.
Wenn man es gelernt hat kann man auch die Programme , insbesondere 
einfache, zu
den verschiedenen Typen, umschreiben.

Schönen Abend
Dirk St

von Dietmar S. (Gast)


Lesenswert?

Hummel schrieb:
> Geht nicht als normaler Port mit High/Low Eingang oder Ausgang. Du
> kannst den Pin aber als Analog Eingang verwenden, musst aber dafür
> sorgen, daß die Spannung nie in den Bereich von logisch Low geht. Da das
> einen Reset auslösen würde.
>
> Schau einfach mal in diesen Thread rein:
> https://www.avrfreaks.net/forum/attiny85-pin-1-reset-and-pb5-functionality

O.k. der Reset ist bei meinem Board enabled. Ich finde den Lösungsansatz 
trotzdem nicht schlecht.

P4 scheint aber einfacher, das werde ich versuchen.

Dass die Sensoren dabei unterbrochen werden, spielt keine Rolle, da ich 
den Taster nur einmalig drücke. Ich halte den Taster gedrückt und 
schalte das Thermometer ein. Den Zustand frage ich nur einmal bei 
Programmstart ab, das EEprom wird gleich zu Beginn gelöscht und ich kann 
ich die Sensoren wieder anlernen.

Da ich die Sensoren ja nur einmalig bei der Inbetriebnahme und bei einem 
eventuellen Sensortausch anlernen muss, reicht da so ein vertieft 
sitzender Microtaster, den ich mit dem Kugelschreiber betätige.


Armin J. schrieb:
> Wie wäre es denn mit ein paar Gedenksekunden an Anfang des setups?
> so einfach mal delay(10000), und schon ist das Problem gelöst oder sehe
> ich da was falsch?

Würde funktionieren, ich hatte mir auch bereits mit einem Trick 
beholfen. Bliebe aber trotzdem das umständliche/mehrfache Hochladen des 
Programms bei einem späteren Sensortausch. Und ich bräuchte den ganzen 
Kram wieder zur Hand.

Harald schrieb:
> Sehe gerade, manche Displays lassen sich sogar per Jumper zwischen I2C
> und SPI umstellen. Schon wären sogar zwei Pins frei.

Das geht bei meinem auch. Hab bzw. hatte nur als Anfänger eben keine 
Ahnung was ich in der Software dann ändern muss. Inzwischen würde es 
vielleicht hinbekommen. Nur wie erkenne ich wo der Fehler ist, wenn das 
Display dunkel bleibt. Es blieb übrigens auch dunkel, als ich den Pullup 
an P4 nicht dran hatte. Da hab ich mich erst blöd gesucht, bis ich drauf 
kam.

von Joachim B. (jar)


Lesenswert?

Veit D. schrieb:
> Alles andere aber das genau eben nicht machen!

da sind wir einig, zum Andern denke ich wir reden aneinander vorbei

Ich meine /CS vom OLED, das wird nach dem LCD Update nicht benötigt!
Am ISP wird CS nicht benötigt, also darf man den /CS nutzen wenn er 
anderweitig nicht genutzt wird.

Man könnte sogar den CS Pin (und MOSI, MISO) hinter einem 74HC4052 
umschalten, wenn Reset low ist (also über ISP programmiert werden soll, 
sonst ist Reset ja high und die Pins sind relativ frei nutzbar.

von Uwe K. (ukhl)


Lesenswert?

Gerald K. schrieb:
> Ich würde mit dem Taster P4 gegen Masse schalten.

Beste Lösung ohne Nebenwirkung und Trickserei.
Einfach beim Programm-Start abfragen. Danach hat der Taster keine 
Funktion mehr, ausser das Lesen der Sensoren zu stören ;-)

von Veit D. (devil-elec)


Lesenswert?

@ Joachim:
Ohne CS kannst du das Display bspw. nicht aktualisieren geschweige denn 
ansprechen. Ich kann dir gedanklich nicht folgen was du am CS nicht 
verstehst. Tut mir leid.

@ Arduino Fanboy:
Benötigt der µC nicht dennoch das Resetsignal trotz Bootloader? Ich 
meine ja. Machen die Arduinos genauso. Reset hängt am DTR Signal vom 
USB-Serial Umsetzer. Ich bin der Meinung ohne Reset ist keine 
Programmierung möglich. Irgendwie muss er vor und nach dem flashen 
resetet werden.

von Spess53 (Gast)


Lesenswert?

Hi

>Ohne CS kannst du das Display bspw. nicht aktualisieren geschweige denn
>ansprechen.

Och , Es gibt Displays, bei denen während der ganzen Übertragung CS Low 
sein  darf( Z.B. Dog Displays). CS Low startet eigentlich nur einen 
Bitzähler.

MfG Spess

von Andreas B. (bitverdreher)


Lesenswert?

Veit D. schrieb:
> Benötigt der µC nicht dennoch das Resetsignal trotz Bootloader? Ich
> meine ja.
Der "Reset" ist dann aber kein Reset, sondern ein simpler Eingangsport.

Veit D. schrieb:
> Irgendwie muss er vor und nach dem flashen
> resetet werden.
Das macht er dann ohne äußere Beschaltung.

von Einer K. (Gast)


Lesenswert?

Veit D. schrieb:
> @ Arduino Fanboy:
> Benötigt der µC nicht dennoch das Resetsignal trotz Bootloader?

Ja und Nein!
Natürlich benötigt er einen Reset um den Bootloader zu starten.
Im Falle des Digistump wird dafür der der "Power On Reset" genutzt.
Egal, ob man den Resetpin zum IO macht, oder auch nicht.
Der Resetpin ist für den ISP Vorgang nötig.
Aber der ist ja schon durch, wenn der Bootloader aufgespielt ist.

von foobar (Gast)


Lesenswert?

Den P4 nicht direkt mit Taster nach GND, sondern noch einen 
18k-Widerstand dazwischen.  Dann wird bei Tastendruck der High-Pegel von 
5V auf 4V gesenkt.  Sollte für die Kommunikation mit den Sensoren egal 
sein, kann aber per ADC gemessen werden.

von Ralph S. (jjflash)


Lesenswert?

Spess53 schrieb:
>>Ohne CS kannst du das Display bspw. nicht aktualisieren geschweige denn
>>ansprechen.
>
> Och , Es gibt Displays, bei denen während der ganzen Übertragung CS Low
> sein  darf( Z.B. Dog Displays). CS Low startet eigentlich nur einen
> Bitzähler.

Ich habe 4 Stück SSD1306 (OLED Display) und 3 Stück PCD8544 (N5110 
Display) getestet, alle mit CS auf "Dauer-Low" und alle funktionieren, 
allerdings jedoch NICHT mit einer Arduino Lib getestet sondern mit einer 
selbst geschriebenen die von vornherein KEINEN Anschlusspin für CS 
vorsieht (und diesen von daher auch nicht initialisiert). Das Ganze aus 
einer C-Umgebung heraus OHNE das Arduino-Framework.

Rein aus Interesse werde ich die Tage mal Arduino installieren und 
sehen, ob das mit der Arduino Bibliothek auch geht.

von fchk (Gast)


Lesenswert?

Nur mal so zur Vollständigkeit:
Für den 1wire Bus gibts auch IO-Port Bausteine, z.B.
https://www.maximintegrated.com/en/products/interface/controllers-expanders/DS2413.html?intcid=para
https://www.maximintegrated.com/en/products/ibutton-one-wire/memory-products/DS2408.html?intcid=para

Sowas ist z.B. in den Apple Magsafe Netzteilen drin: Über die beiden 
IO-Pins wird die Rot-Grün LED gesteuert, und über die Seriennummer im 
ROM weiß der Mac, was für ein Netzteil er hat und wieviel Watt das hat.

fchk

von Joachim B. (jar)


Lesenswert?

Veit D. schrieb:
> @ Joachim:
> Ohne CS kannst du das Display bspw. nicht aktualisieren geschweige denn
> ansprechen. Ich kann dir gedanklich nicht folgen was du am CS nicht
> verstehst. Tut mir leid.

das ist mir doch klar, nur will man ja nicht zu jeder µs das Display 
ansteuern!

Was verstehst du daran nicht?
Ist der aktuelle Text auf dem Display, kann man für mindestens 100ms den 
CS vom Display anderweitig nutzen, z.B. um einen Taster abzufragen!
Mehr als 10 Aktualisierungen/s vom Display braucht doch kein Mensch, 
weil es unleserlich wird.
Das Display darf denn den Taster CS Status nicht mitgeteilt bekommen.
Das erreicht man mit mit dem analog mutliplexer oder mit logik IC welche 
das CS zum Display sperren. Es bietet sich Reset high an, wenn der µC 
nicht im Programmiermodus ist oder der DS-Port wenn gerade keine DS18b20 
Abfrage läuft!

Das liegt doch alles in Programmiererhand!

von Veit D. (devil-elec)


Lesenswert?

Arduino Fanboy D. schrieb:
> Veit D. schrieb:
>> @ Arduino Fanboy:
>> Benötigt der µC nicht dennoch das Resetsignal trotz Bootloader?
>
> Ja und Nein!
> Natürlich benötigt er einen Reset um den Bootloader zu starten.
> Im Falle des Digistump wird dafür der der "Power On Reset" genutzt.
> Egal, ob man den Resetpin zum IO macht, oder auch nicht.
> Der Resetpin ist für den ISP Vorgang nötig.
> Aber der ist ja schon durch, wenn der Bootloader aufgespielt ist.

Ich verstehe das noch nicht. Soll man den Digistump jedesmal am USB aus- 
und einstöpseln um den zu flashen? Wieviel Sekunden wartet der 
Bootloader bis er der µC sein Programm startet?


Spess53 schrieb:
> Hi
>
>>Ohne CS kannst du das Display bspw. nicht aktualisieren geschweige denn
>>ansprechen.
>
> Och , Es gibt Displays, bei denen während der ganzen Übertragung CS Low
> sein  darf( Z.B. Dog Displays). CS Low startet eigentlich nur einen
> Bitzähler.

Darum gehts nicht. Es geht nicht um "während der Übertragung". Das ist 
logisch. Es geht um dauerhaften Low Pegel am CS des Display ohne 
Änderungsmöglichkeit.


Ralph S. schrieb:
> Ich habe 4 Stück SSD1306 (OLED Display) und 3 Stück PCD8544 (N5110
> Display) getestet, alle mit CS auf "Dauer-Low" und alle funktionieren,
> allerdings jedoch NICHT mit einer Arduino Lib getestet sondern mit einer
> selbst geschriebenen die von vornherein KEINEN Anschlusspin für CS
> vorsieht (und diesen von daher auch nicht initialisiert). Das Ganze aus
> einer C-Umgebung heraus OHNE das Arduino-Framework.
>
> Rein aus Interesse werde ich die Tage mal Arduino installieren und
> sehen, ob das mit der Arduino Bibliothek auch geht.

Das hat nichts mit Arduino zu tun. Ich habe das jetzt einmal mit meinem 
EA DOGM 128 probiert. Ich bin jetzt ehrlich gesagt überrascht das es mit 
Dauer Low Pegel funktioniert. Hab CS direkt auf Masse gelegt. Ich 
verstehe es nicht. Woher weiß das SPI Device das es jetzt angesprochen 
wird, das die Daten ihm gelten? Das kann doch nicht während die Bits 
noch reingeschoben werden diese schon verarbeiten. Spätestens mit Daisy 
Chain kommt doch Müll raus. Allerspätestens wenn man verschiedene SPI 
Devices mit Daisy Chain mischt. Dann schiebt man ja den sortierten 
Bitstrom hintereinander raus. Verstehe ich nicht. Wer kann das bitte 
erklären?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Veit D. schrieb:
> Ich bin jetzt ehrlich gesagt überrascht das es mit Dauer Low Pegel
> funktioniert.

Warum denn nicht? CS enabled den Clock-Eingang, fertig. Dafür braucht 
man keine Flanke auf CS.

EDIT:

Auszug aus https://de.wikipedia.org/wiki/Serial_Peripheral_Interface

"Mit jeder Taktperiode wird ein Bit übertragen. Beim üblichen 
Bytetransfer sind also acht Taktperioden für eine vollständige 
Übertragung nötig. Es können auch mehrere Worte hintereinander 
übertragen werden, wobei in der Spezifikation nicht festgelegt ist, ob 
zwischen jedem Wort das SS-Signal kurz wieder auf High gezogen werden 
muss. Eine Übertragung ist beendet, wenn das Slave-Select-Signal 
endgültig auf High gesetzt wird."

: Bearbeitet durch Moderator
von Veit D. (devil-elec)


Lesenswert?

Frank M. schrieb:
> Veit D. schrieb:
>> Ich bin jetzt ehrlich gesagt überrascht das es mit Dauer Low Pegel
>> funktioniert.
>
> Warum denn nicht? CS enabled den Clock-Eingang, fertig. Dafür braucht
> man keine Flanke auf CS.
>
> EDIT:
>
> Auszug aus https://de.wikipedia.org/wiki/Serial_Peripheral_Interface
>
> "Mit jeder Taktperiode wird ein Bit übertragen. Beim üblichen
> Bytetransfer sind also acht Taktperioden für eine vollständige
> Übertragung nötig. Es können auch mehrere Worte hintereinander
> übertragen werden, wobei in der Spezifikation nicht festgelegt ist, ob
> zwischen jedem Wort das SS-Signal kurz wieder auf High gezogen werden
> muss. Eine Übertragung ist beendet, wenn das Slave-Select-Signal
> endgültig auf High gesetzt wird."

Hallo,

darf ich den letzten Satz hervorheben?
"Eine Übertragung ist beendet, wenn das Slave-Select-Signal endgültig 
auf High gesetzt wird."

Jetzt fehlt noch die Erklärung wie das ohne low>high funktioniert. Darum 
gehts ja in der ganzen Diskussion.

: Bearbeitet durch User
von M. K. (sylaina)


Lesenswert?

Joachim B. schrieb:
> Das Display darf denn den Taster CS Status nicht mitgeteilt bekommen.
> Das erreicht man mit mit dem analog mutliplexer oder mit logik IC welche
> das CS zum Display sperren.

Viel zu kompliziert. Statt CS kann man auch die MOSI-Leitung benutzen in 
der Schaltung denn solange man dem Display nix schicken will und CS den 
entsprechenden Status hat ist es dem Display auch völlig egal was MOSI 
macht ;)

von Veit D. (devil-elec)


Lesenswert?

Hallo,

:-)    Beitrag "Re: ATtiny85 benötige Taster und kein freier Port"

Du hast doch auch Ahnung. Warum funktioniert das SPI Display mit 
dauerhaften Low Pegel am CS?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Veit D. schrieb:
> darf ich den letzten Satz hervorheben?
> "Eine Übertragung ist beendet, wenn das Slave-Select-Signal endgültig
> auf High gesetzt wird."
> Jetzt fehlt noch die Erklärung wie das ohne low>high funktioniert.

Bei Dauer-Low wird die Übertragung halt nie beendet. Wo ist denn das 
Problem? Das ist eine synchrone Schnittstelle. Solange kein Takt da ist, 
kannst Du auf der Datenleitung machen, was Du willst.

Betrachte doch einfach CS als Enable für den Takt. Solange CS high ist, 
wird der Takt ignoriert. Ist es Low, wird auf den Takt geachtet. Das 
lässt sich mit einer einfachen Gatter-Schaltung realisieren. Und so 
werden es die meisten SPI-Slaves auch umgesetzt haben.

: Bearbeitet durch Moderator
von HildeK (Gast)


Lesenswert?

M. K. schrieb:
> Viel zu kompliziert. Statt CS kann man auch die MOSI-Leitung benutzen in
> der Schaltung denn solange man dem Display nix schicken will und CS den
> entsprechenden Status hat ist es dem Display auch völlig egal was MOSI
> macht ;)

Ja genau. Da der Taster ja nur zu Beginn abgefragt werden soll, macht 
man dann eben die Initialisierung des Displays danach - wenn der Taster 
wieder losgelassen wurde. Selbiges geht auch mit der CS-Leitung.
Ein kleiner Schutzwiderstand am Taster sollte nicht fehlen, falls mal 
einer während des Betriebs trotzdem drücken würde.

von Einer K. (Gast)


Lesenswert?

Veit D. schrieb:
> Ich verstehe das noch nicht. Soll man den Digistump jedesmal am USB aus-
> und einstöpseln um den zu flashen? Wieviel Sekunden wartet der
> Bootloader bis er der µC sein Programm startet?

Ja!
Der PC wartet ca 30 Sek der Bootloader 6 oder so ähnlich...
Also Zeit satt.

Aber, wenn du mir schon nicht glaubst, dann vielleicht dem Anbieter der 
Originale, denn dessen Doku ist recht umfangreich.
https://digistump.com/wiki/digispark/tutorials/connecting
https://digistump.com/wiki/digispark/tutorials/programming

von Veit D. (devil-elec)


Lesenswert?

Hallo,

Arduino Fanboy D. schrieb:
> Veit D. schrieb:
>> Ich verstehe das noch nicht. Soll man den Digistump jedesmal am USB aus-
>> und einstöpseln um den zu flashen? Wieviel Sekunden wartet der
>> Bootloader bis er der µC sein Programm startet?
>
> Ja!
> Der PC wartet ca 30 Sek der Bootloader 6 oder so ähnlich...
> Also Zeit satt.
>
> Aber, wenn du mir schon nicht glaubst, dann vielleicht dem Anbieter der
> Originale, denn dessen Doku ist recht umfangreich.
> https://digistump.com/wiki/digispark/tutorials/connecting
> https://digistump.com/wiki/digispark/tutorials/programming

Das hat nichts mit glauben zu tun. Warum diese Unterstellung? Mir war 
nur nicht bekannt das man das Ding umständlich jedesmal aus- und 
einstöpseln muss. Das hätte als Antwort alles erschlagen. Aber nun ist 
das ja endlich geklärt mit dem Reset.



Frank M. schrieb:
> Betrachte doch einfach CS als Enable für den Takt. Solange CS high ist,
> wird der Takt ignoriert. Ist es Low, wird auf den Takt geachtet. Das
> lässt sich mit einer einfachen Gatter-Schaltung realisieren. Und so
> werden es die meisten SPI-Slaves auch umgesetzt haben.

Das beantwortet nicht meine Frage. Ist denn das verstehen der Frage 
wirklich so kompliziert? Kann ich mir nicht vorstellen. Also nochmal.
CS ist DAUERHAFT! low, Bits werden reingeschoben. Woher weiß das SPI 
Device das die Bits jetzt ordnungsgemäß an der Bahnsteigkante stehen und 
übernommen werden sollen? Also woher weiß das SPI Device das Bit 0 vom 
Bitstrom wirklich an Position 0 steht ohne mittels CS gesagt zubekommen 
der Bit-Zug steht jetzt vorn am Haltesignal. Alle Bits können ein- und 
aussteigen.

Beim Daisy Chain noch anders verdeutlicht. Soll das erste SPI Device 
alle Bits verarbeiten die vorbeikommen? Obwohl die Bits gar nicht für 
ihn bestimmt sind. Wäre ja Unsinn.

: Bearbeitet durch User
von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

Ich habe mir jetzt mal die Mühe gemacht und geschaut, wie man bei einem 
SSD1306-SPI Display eine Leitung einsparen kann.

Leider mangelt es mir hier an einem ATtiny85 (ich dachte ich hätte noch 
einen hier) und an einem Display wie es der TO verwendet hat (er hat die 
Variante mit 6 Anschlüssen am SPI: +Vdd, GND, data, sck, res, cs, dc).

Ich habe nur einen Tiny44 und ein Display mit 7 Anschlüssen zur 
Verfügung (Display hat einen zusätzlichen RES Anschluß).

Damit das ganze auch wirklich unter Arduino läuft habe ich mir an dem 
momentanen Rechner eben Arduino und einen ATtiny Core installiert.

Das Ergebnis ist: Zum Controller werden die Anschlüsse sck (D0), data 
(D1) und dc verwendet.

Damit das Display beim Anschließen der Betriebsspannung auch garantiert 
resetet habe ich an den RES - Anschluß ein RC-Glied angeschlossen:
1
          +Vdd o------+
2
                      |
3
                     ,-,
4
                     | |
5
                     | |   2.2k
6
                     '-'
7
                      |
8
    res (OLED) o------+
9
                      | +
10
                     ---
11
                     ---  4.7uF
12
                      |
13
                     ---
Diese Vorgehensweise bedingt eine Wartezeit vor dem eigentlichen 
Initialisieren des Displays:
1
  // warten bis das RC-Glied den Reset am Display garantiert durchgefuehrt hat  
2
  delay(100);    
3
  ssd1306_init();

Ein Video von der Funktionsfähigkeit findet sich hier:

https://www.youtube.com/watch?v=pgJC6c4ZV0A

Der Arduino-Code befindet sich im Anhang und aus den Funktionen wurde 
absichtlich keine "Library" abgeleitet, damit das auch garantiert 
nachvollzogen werden kann.

SPI-Schnittstelle ist mittels Bitbanging realisiert (funktioniert bei 
meinem Testaufbau aber auch problemlos mittels USI), damit das auch 
garantiert auf jedem AVR mit genügend Flash ausprobiert werden kann !

Das Demoprogramm benötigt 2478 Bytes Flash

von Martin H. (horo)


Lesenswert?

Veit D. schrieb:
> Ich verstehe das noch nicht. Soll man den Digistump jedesmal am USB aus-
> und einstöpseln um den zu flashen? Wieviel Sekunden wartet der
> Bootloader bis er der µC sein Programm startet?

Du kannst auch einen anderen Bootloader wählen, der nur bei bestimmten 
Bedingungen startet und ansonsten sofort ins Benutzerprogramm verzweigt, 
die Auswahl ist groß:
https://github.com/ArminJo/micronucleus-firmware#legend

von Veit D. (devil-elec)


Lesenswert?

@ Martin:
Danke für die Info. Obwohl mir diese Art des Resets weiterhin zu 
umständlich erscheint. :-)

von Einer K. (Gast)


Lesenswert?

Veit D. schrieb:
> Obwohl mir diese Art des Resets weiterhin zu
> umständlich erscheint. :-)
Das eine sind die Fakten, die Quelle habe ich dir verlinkt.
Und das andere sind deine Gefühle und Emotionen.

Das eine liegt in der Verantwortung der (H)Ersteller, und das andere in 
deiner.
Ich bin hier nur der Bote.

Andererseits:
Wie würdest du bei einer solchen Tiny85 USB Schaltung den Reset 
konstruieren?
Gibt es eine Alternative?
Welche?




Zudem, hoffe ich mal, .....

Veit D. schrieb:
> Dietmar S. schrieb:
>> Wenn sich der Resetpin als Port nutzen lässt, wäre das ja die einfachste 
Lösung.
> Alles andere aber das genau eben nicht machen!

...... dass sich dieses dann auch erledigt hat.

von Veit D. (devil-elec)


Lesenswert?

Arduino Fanboy D. schrieb:
> Veit D. schrieb:
>> Obwohl mir diese Art des Resets weiterhin zu
>> umständlich erscheint. :-)
> Das eine sind die Fakten, die Quelle habe ich dir verlinkt.
> Und das andere sind deine Gefühle und Emotionen.
>
> Das eine liegt in der Verantwortung der (H)Ersteller, und das andere in
> deiner.
> Ich bin hier nur der Bote.
>
> Andererseits:
> Wie würdest du bei einer solchen Tiny85 USB Schaltung den Reset
> konstruieren?
> Gibt es eine Alternative?
> Welche?

Ich sags dir ganz deutlich. Unterlasse deine sinnfreien Unterstellungen 
bzw. Anspielungen. Ich hatte eine klare Frage, darauf gabs sehr spät die 
erlösende Antwort. Ich habe dir dabei nie irgendwas unterstellt oder 
dergleichen. Also lass das gefälligst sein.

Wegen der Frage. Ich würde solchen Mist erst gar nicht machen. Wenn ein 
Pin fehlt, dann fehlt eben ein Pin. Werden mehr gebraucht, nimmt man 
einen größeren Controller. Fertig. Manche Sparmaßnahmen sind nicht immer 
sinnvoll. Meine Meinung. Und ja ich weiß das es meine Meinung ist. Du 
musst mir nichts erneut unterstellen. Danke.

von Einer K. (Gast)


Lesenswert?

Veit D. schrieb:
> Unterstellungen
Unterstellungen?
> Alles andere aber das genau eben nicht machen!
Du teilst Empfehlungen aus, kritisierst/negierst damit meine Aussagen, 
ohne die Geräte/Umstände zu kennen. Vermutlich sogar auf falschen 
Annahmen beruhend.
Das soll ich dann kommentarlos einstecken, mir gefallen lassen....

Ein interessantes Verhalten/Erwartungshaltung.

von AtzeM (Gast)


Lesenswert?

Ralph S. schrieb:
> Damit das Display beim Anschließen der Betriebsspannung auch garantiert
> resetet habe ich an den RES - Anschluß ein RC-Glied angeschlossen:

Dieses Problem haben wir bei einem Serienprodukt auch so gelöst. Ein 
Port fehlte am uC, der CS-Anschluß zum LCD-ChipOnGlasGraphikDisplay 
(SPI) wurde dann durch ein RC-Glied ersetzt  -> nur noch drei Leitungen 
zu bedienen anstatt vier (MOSI, A1, CLK). Das Display (über einen 
zusätlichen Port per p-Channel bepowert) lief dann 30 sec nach dem 
WakeUP und wurde in dieser Einschaltzeit teilweise häufig aktualisiert, 
ohne am CS zu wakeckeln zu müssen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Veit D. schrieb:
> Woher weiß das SPI Device das die Bits jetzt ordnungsgemäß an der
> Bahnsteigkante stehen und übernommen werden sollen?

Wenn CS auf Low geht, wird ein interner Bitzähler auf 0 gesetzt. Mehr 
braucht man nicht:

Das SPI Device entscheided anhand des Bitzählers, dass die Bits nun 
vollständig angekommen sind. Wenn es ein Byte erwartet, dann zählt es 
bis 8. Hat der Zähler den Wert 8 erreicht, werden die 8 Bits als Byte 
übernommen. Der Bitzähler wird dann wieder auf 0 gesetzt. Fertig.

CS (bzw. dessen Flanke) ist also kein Trigger für ein Latch oder 
ähnliches. CS bedeutet nur: Zähle den Takt mit oder ignoriere ihn. 
Mittels der Flanke High-> Low kann man den Bitzähler zurücksetzen(*). 
Das wars aber auch schon.

(*) EDIT:

Es könnte auch technisch so gelöst sein, dass bei der Flanke Low -> High 
- also nach der Übertragung bereits der Bitzähler auf 0 gesetzt wird. 
Das ist aber - von außen gesehen - schnuppe und ändert nichts.

: Bearbeitet durch Moderator
von Veit D. (devil-elec)


Lesenswert?

Arduino Fanboy D. schrieb:
> Veit D. schrieb:
>> Unterstellungen
> Unterstellungen?
>> Alles andere aber das genau eben nicht machen!
> Du teilst Empfehlungen aus, kritisierst/negierst damit meine Aussagen,
> ohne die Geräte/Umstände zu kennen. Vermutlich sogar auf falschen
> Annahmen beruhend.
> Das soll ich dann kommentarlos einstecken, mir gefallen lassen....
>
> Ein interessantes Verhalten/Erwartungshaltung.

Du versuchst schon wieder meine Worte umzudrehen. Ich habe dich nämlich 
nie kritisiert - sondern das Produkt. Drauf legst du doch sonst immer 
viel wert. Diesmal klappt das irgendwie nicht. Dabei belasse ich das 
hier. Ist ja unmöglich solches Verhalten.

von AtzeM (Gast)


Lesenswert?

Bin zwar kein ATTiny-Experte,

hab im Datasheet mal nachgeschaut: P5 ist doch für einen Taster 
prädestiniert, da im Schaltplan die Reset-Funktion eh nicht benutzt 
wird...

PCIN5 kann dann im IRQ-Kontext sehr leicht einen Tastendruck erkennen 
(Markervariable setzen) und später diese in der Main-Loop auswerten, 
wenn das SPI-Diplay pennt und nichts zu tun hat und dann 
weiterverarbeiten ...

Seite 60.
P5  PCINT5: Pin Change Interrupt, Source 5

Mann muss nur sichergehen, das P5 richtig auf PCINT konfiguriert wird in 
der FW....

von Joachim B. (jar)


Lesenswert?

M. K. schrieb:
> Statt CS kann man auch die MOSI-Leitung benutzen

auch das ist mir klar, für hier wo MOSI nicht genutzt wird kann man das 
machen, allgemein MOSI nehmen zu können würde ich es nicht so verkürzt 
schreiben.
Irgendwann liest einer man kann Mosi nehmen ohne den Zusammenhang und 
heult dann wieder das es eben nicht geht!
Du glaubst doch nicht das JEDER immer den ganzen Thread liest und den 
Zusammenhang BENUTZT vs. NICHT BENUTZT versteht?

von Veit D. (devil-elec)


Lesenswert?

Frank M. schrieb:

> Wenn CS auf Low geht, wird ein interner Bitzähler auf 0 gesetzt. Mehr
> braucht man nicht:
>
> Das SPI Device entscheided anhand des Bitzählers, dass die Bits nun
> vollständig angekommen sind. Wenn es ein Byte erwartet, dann zählt es
> bis 8. Hat der Zähler den Wert 8 erreicht, werden die 8 Bits als Byte
> übernommen. Der Bitzähler wird dann wieder auf 0 gesetzt. Fertig.
> (zu lang, gekürzt)

Hallo,

soweit okay und verstanden. Für ein Device am Bus funktioniert das. 
Aber! Bei Daisy Chain würde das bedeuten, dass das erste Device welches 
alle Bytes sieht, auf alles reagieren würde. Kann und darf doch nicht 
sein?

von Einer K. (Gast)


Lesenswert?

Veit D. schrieb:
> Ich habe dich nämlich nie kritisiert
Habe ich das gesagt?

Das habe ich gesagt:
> kritisierst/negierst damit meine Aussagen,


Veit D. schrieb:
> Du versuchst schon wieder meine Worte umzudrehen.
Wer verdreht Worte?
Na, wer?

Merke: Meine Aussagen kann ich ändern/korrigieren.
Mich kann ich nicht auswechseln.

Aber wie auch immer:
Bei dem Digistump Klon kann man die Reset disable Fuse setzen, ohne 
Furcht zu haben, dass man ihn nicht mehr programmieren kann.
Das wurde vom ursprünglichen Hersteller so vorgesehen, und wenn damit 
einer emotional nicht klar kommt, ist das eben dessen Problem.

Mir scheint, der Digistump ist nichts für dich....

von AtzeM (Gast)


Lesenswert?

Hier ist aber nur "EIN" Device am SPI-Bus, ein Display. kein Daisy-Chain 
...

Hängt aber auch vom SPI-Device ab, bei auch nur "einem" SPI-SerialFlash 
am Bus ohne anderere Teilnehmer z.B. geht das mit dem CS (über 
RC-Kombination) nicht, der benötigt auch (öfters) CS-Flanken ...

von AtzeM (Gast)


Lesenswert?

Dietmar S. (didi2); der TO

scheint eh schon raus zu sein, bei dem Gezanke hier kein Wunder ...

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Veit D. schrieb:
> Bei Daisy Chain würde das bedeuten, dass das erste Device welches alle
> Bytes sieht, auf alles reagieren würde.

Da hast Du allerdings recht.

In 
https://www.mikrocontroller.net/articles/SPI_Daisychain#.C3.84nderungen_in_der_Steuerung 
ist das Daisychaining ganz gut erklärt. Hier ist es wohl tatsächlich so, 
dass mit steigender Flanke von SS jeder Slave die letzten 8 
übermittelten Bits dann übernimmt. Hier "rotieren" die Bitzähler wohl 
durch: 0,1,2,3,...,7,0,1,2...7

Wenn ich es recht verstehe, ist aber nicht jeder Slave 
Daisy-Chain-fähig. Die Daisy-Chain-fähigen werden SS (bzw. CS) als 
Trigger für ein Latch nehmen, die anderen werden das wohl so machen, wie 
ich es beschrieb - einfach, weil es simpler umzusetzen ist.

Fazit:

Diejenigen Slaves, die Werte ohne CS-Flanke trotzdem übernehmen, können 
prinzipiell nicht Daisy-Chain-fähig sein.

Im Artikel steht noch, dass alle Slaves dieselbe Anzahl von Bits 
erwarten müssen, man also 8-er und 16-er Slaves nicht mischen kann. 
Klar, das versteht sich von selbst.

: Bearbeitet durch Moderator
von Veit D. (devil-elec)


Lesenswert?

Hallo,

habe parallel auch nach einer Antwort gesucht und bin bei Analog Devices 
fündig gewurden. Unter Daisy-Chain Method findet man folgenden fast 
unscheinbaren Satz. "Daisy-chain mode is not necessarily supported by 
all SPI devices. Please refer to the product data sheet to confirm if 
daisy chain is available."
https://www.analog.com/en/analog-dialogue/articles/introduction-to-spi-interface.html
Wie ihr inzwischen schon geschrieben habt. Das erklärt nun alles. Schön 
das es nun geklärt ist. Ich danke allen Beteiligten.

von Dietmar S. (Gast)


Lesenswert?

AtzeM schrieb:
> Dietmar S. (didi2); der TO
>
> scheint eh schon raus zu sein, bei dem Gezanke hier kein Wunder ...

Ich lese noch mit :)

Bin nur noch nicht dazugekommen, den Taster anzulöten.

von MCUA (Gast)


Lesenswert?

>habe parallel auch nach einer Antwort gesucht und bin bei Analog Devices
>fündig gewurden
..aber schon interessant, dass jetzt Analog Devices nach Atmel gefragt 
wird

von Einer K. (Gast)


Lesenswert?

MCUA schrieb:
> dass jetzt Analog Devices nach Atmel gefragt wird

Ach, das ist doch alles egal!
Im Gegensatz zu z.B. I2C, ist SPI nirgendwo spezifiziert.
Da kann jeder sein eigenes Süppchen kochen. So kommt/kam es halt zu so 
einem ungehinderten Wildwuchs und den daraus entstehenden 
Inkompatibilitäten.

Also:
Die konkrete zugehörige Doku  lesen, dann wird alles gut.
Und nicht versuchen, alles gelesene, auf alle Geräte zu übertragen, denn 
das wird in den Irrtum führen.

von Veit D. (devil-elec)


Lesenswert?

MCUA schrieb:
>>habe parallel auch nach einer Antwort gesucht und bin bei Analog Devices
>>fündig gewurden
> ..aber schon interessant, dass jetzt Analog Devices nach Atmel gefragt
> wird

SPI hat nichts mit Atmel (Microchip) oder Analog Devices o.a. 
Herstellern zu tun. So eine SPI Beschreibung findet man sicherlich bei 
allen Herstellern. Im Endeffekt funktioniert das Display hier mit 
dauerhaften CS auf low. Würde aber nicht mit Daisy Chain funktionieren. 
Das ist das ganze Geheimnis um die "Verwirrung".
Daraus folgt. Standard ist jedes SPI Device mit CS gezielt ansprechen. 
Das funktioniert immer. Daisy Chain ist möglich wenn es das IC zulässt.
Die Erklärung von Frank ist schon perfekt.

von MCUA (Gast)


Lesenswert?

>SPI hat nichts mit Atmel (Microchip) oder Analog Devices o.a.
>Herstellern zu tun.
....
>Da kann jeder sein eigenes Süppchen kochen.
....
Eben.
Die Suppe sollte man auch konkret lesen.
(Oder es selber machen mit eigener Hardware, dann gehn u.a. auch FIFOs 
besser)

von Ralph S. (jjflash)


Lesenswert?

Auch wenn der (eher kleinere) Zank erstaunlich- und erfreulicherweise 
friedlich zu Ende gegangen ist, habe ich jetzt doch mal schlicht eine 
Frage zur Begrifflichkeit:

Im Zusammenhang mit SPI habe ich bei den Devices schon anhand der 
Bezeichnung der Anschlusspins unterschieden gehabt. Ein SS war für mich 
immer ein SlaveSelect und von daher höchstwahrscheinlich 
Daisy-Chain-fähig.

Ein CS war für mich (steinigt mich nicht, das ist wirklich eine Frage) 
von der Abkürzung her immer ein ChipSelect und hat mehr oder weniger den 
Baustein selektiert (nach welcher Methode auch immer) und war NICHT 
Daisy-Chain-fähig.

Zum Test habe ich jetzt alle mir verfügbaren SPI-Displays (vor allem 
auch Color TFT mit S6D0A2, st7735, ili9341, ili9225 und ili9163 aber 
auch das n5110 s/w Display mit pcd8544) getestet, die mit CS beschriftet 
sind. Alle haben mit CS= Dauer-Low funktioniert.

Liege ich mit meiner Interpretation von SS und CS daneben ?

von Ralph S. (jjflash)


Lesenswert?

PS: Vergessen hatte: Wenn ein Device KEIN miso hat, bin ich auch immer 
davon ausgegangen, dass es ein ChipSelect und kein SlaveSelect sein 
kann, weil dem Device ja schlicht das miso fehlt um sein empfangenes 
Datum weiter zu senden.

von Einer K. (Gast)


Lesenswert?

Ralph S. schrieb:
> PS: Vergessen hatte: Wenn ein Device KEIN miso hat, bin ich auch
> immer
> davon ausgegangen, dass es ein ChipSelect und kein SlaveSelect sein
> kann, weil dem Device ja schlicht das miso fehlt um sein empfangenes
> Datum weiter zu senden.

Wie schon gesagt:
Da es keinen allgemein gültigen Standard gibt, sind alle diese Annahmen 
eher ein stochern im Nebel.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

wir kennen uns schon länger und wissen (davon gehe ich aus) wie weit wir 
es treiben können. Deswegen läuft das human ab.   :-)

SPI Standard ist wie ich schon geschrieben habe. Jedes Device wird 
konkret mit seinen CS angesprochen. Das funktioniert immer. Daran gibts 
nichts zu rütteln. Das ist der Standard ohne Nebel.  :-)

Daisy Chain ist nach aktuellen Erkenntnissen eine Option wenn die 
Devices das unterstützen. Die können ja trotzdem alle am gleichen Bus 
(Clock, Data) hängen. Aber die CS Leitungen sind getrennt. Für Daisy 
Chain unterstützende eine gemeinsame. Für nicht Daisy Chain fähige gibts 
standardmäßig jeweils eigene CS Leitungen.

Übrigens ist Chip-Select und Slave Select immer gleich bedeutet. Nur die 
Hersteller beschriften das unterschiedlich. Warum auch immer. Man möchte 
ja standardmäßig immer eines gezielt ansprechen, egal ob man Daten 
schickt oder auslesen möchte.

Unsere Displays sind demnach nicht Daisy Chain fähig. Funktionieren aber 
nach Standard mit CS einwandfrei. Wenn alleine am Bus eben auch mit 
Dauer Low an CS.

Das alles ist die aktuelle Erkenntnis der Frage Antwort Runde. Und ich 
finde es gut das darüber gesprochen wurde.

von Dietmar S. (Gast)


Lesenswert?

Verdammte Sch... das funktioniert! Ich habe mich eben mal dran gesetzt 
und dank eurer Hilfe funktionierte es im Handumdrehen.

Einfach einen Taster von Pin4 nach Masse löten. Der Pullup ist wegen den 
Sensoren ja schon da.

Dann habe ich
1
// EepromClear();

ersetzt durch:
1
int stat = HIGH;
2
stat = digitalRead(4);
3
if (stat == LOW) {
4
   EepromClear();
5
   }

Allerdings hatte ich immer noch das Problem, dass der erste Sensor nicht 
erkannt wurde und gleich wieder Mist im EEprom stand, weil ja durch den 
gedrückten Taster der 1-Wire-Bus auf Masse lag.

Also noch ein paar Zeilen weiter das:
1
if (slot < 4) {

ersetzen durch:
1
if (slot < 4 and stat != LOW) {

Beim Einschalten Taster gedrückt halten und schon kann ich die Sensoren 
nacheinander anlernen. Das Drücken des Tasters während des Betriebs 
stört übrigens nicht. Die Werte auf dem Display frieren lediglich ein 
und sobald ich loslasse, werden die Temperaturen wieder aktualisiert.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

vielleicht musst du die Funktionen bzw. die Abarbeitung noch sauberer 
trennen. Erst alles abarbeiten was mit dem Taster zu tun hat. Danach 
alle Busse initialiseren. Dann sollte es keine Probleme geben.
Aber schön das es funktioniert bzw. du auf dem richtigen Weg bist.
Entschuldigung das ich zwischendrin deinen Thread gekapert habe. Ich 
finde jedoch das war sehr wichtig. Danke.

: Bearbeitet durch User
von Dietmar S. (Gast)


Lesenswert?

Veit D. schrieb:
> vielleicht musst du die Funktionen bzw. die Abarbeitung noch sauberer
> trennen. Erst alles abarbeiten was mit dem Taster zu tun hat. Danach
> alle Busse initialiseren. Dann sollte es keine Probleme geben.
> Aber schön das es funktioniert bzw. du auf dem richtigen Weg bist.

Also das Programm stammt ja nicht von mir. Ich wollte meinen Teil auch 
zuerst ganz an den Anfang schreiben, doch alle benötigten Funktionen 
standen unterhalb. Also habe ich den Code da einfügt, wo auch der 
Entwickler den EEprom Löschbefehl hingeschrieben hatte (worüber ich mich 
auch gewundert hab). Das Programm komplett umzuschreiben, für einen 
Taster, der im gesamten Leben des Geräts keine 10x gedrückt wird, fände 
ich nicht so sinnvoll und dazu habe ich auch leider noch zu wenig 
Ahnung. Ich bin schon froh dass ich den Code überhaupt verstehe und das 
ich das vorhin so schnell hinbekommen habe :)

> Entschuldigung das ich zwischendrin deinen Thread gekapert habe. Ich
> finde jedoch das war sehr wichtig. Danke.

Ist doch kein Problem, ich finde das jetzt nicht schlimm. Im Gegensatz 
zu meinem (nicht mehr bestehenden) Forum, kommen die Leute hier meist 
wieder zum Thema zurück. In meinem Forum sind die Threads durch so was 
regelmäßig eskaliert.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

du programmierst sicherlich in der Arduino IDE nehme ich an. Dann 
schreibst du deinen zusätzlichen Programmcode ins setup. bzw. ruft die 
zusätzlichen Funktionen im setup auf. setup wird einmalig abgearbeitet. 
loop wird ständig abgearbeitet. Man kann es auch in loop schreiben und 
sich mittels einem bool selbst aus dem Rennen nehmen lassen wenn alles 
fertig ist. Je nach Geschmack. Ersteres finde ich übersichtlicher.

setup kannste meinetwegen mit einer while solange blockieren wie all das 
was mit dem Taster abgearbeitet werden soll fertig ist. Dann verlässt du 
while und die loop kann wie bisher auch sein Ding machen.

Idee ist wie folgt.
Taster in setup abfragen, wenn gedrückt ein bool auf true setzen. Nennen 
wir es tasterAktiv. dann folgt meinetwegen am Ende von setup ein 
while(tasterAktiv) { ... }.
In diesem while machste das was du tun musst. Wenn alles fertig ist 
setzt du tasterAktiv auf false und die while wird verlassen und die loop 
ist dran.

Ob die Funktionen im Sketch oben oder unten stehen in der Reihenfolge 
ist in der Arduino IDE egal. Die baut sich die Funktionsprototypen 
selbst zusammen. Entscheidend ist was in setup / loop steht bzw. 
aufgerufen wird.

von Spess53 (Gast)


Lesenswert?

Hi

du programmierst sicherlich in der Arduino IDE nehme ich an.

Warum sollte er so dumm sein?

MfG Spess

von Joachim B. (jar)


Lesenswert?

Spess53 schrieb:
> Warum sollte er so dumm sein?

was ist daran dumm?
Auch in der IDE kann man normal programmieren, auch ohne C++ nur in C, 
sogar ohne setup() und ohne loop().

Klingt komisch ist aber so.

von Einer K. (Gast)


Lesenswert?

Ach, lass ihm...
Ihm kann nicht zitieren, bezeichnet aber andere als dumm.

Daran merkste schon, dass ihm heute nicht alle Streusel auf dem Kuchen 
hat.

von Peter D. (peda)


Lesenswert?

Keine Ahnung, was hier wieder abgeht.

Zum Thema:
Man kann an MOSI, MISO, SCK je einen Taster über 1k..4,7k gegen GND 
anschließen und abfragen (Input mit Pullup). Das Programmieren und die 
Displayausgabe wird dadurch nicht behindert.

von Alex D. (allu)


Lesenswert?

Gerald K. schrieb:
> Ich würde mit dem Taste P4 gegen Masse schalten. Einzig beim Betätigen
> des Tasters funktioniert das Pollen der Temperatursensoren nicht. Ich
> denke das kann man verschmerzen.
>
> Das Display wird in seiner Funktion nicht beeinträchtigt und man kann
> dieses während des Tastendruckes verwenden.

Meiner Meinung nach war bereits die erste Antwort optimal! Leicht 
auszuprobieren und dank wired-or auch für die Hardware ungefährlich.

von Peter D. (peda)


Lesenswert?

Alex D. schrieb:
> Meiner Meinung nach war bereits die erste Antwort optimal!

Ich würde lieber einen Kurzschluß auf den Sensorleitungen erkennen 
wollen und daher noch einen Widerstand opfern, z.B. für die Taste an 
MISO.

von Dietmar S. (Gast)


Lesenswert?

Veit D. schrieb:
> du programmierst sicherlich in der Arduino IDE nehme ich an.

Ja, in der Arduino IDE.

> Dann
> schreibst du deinen zusätzlichen Programmcode ins setup. bzw. ruft die
> zusätzlichen Funktionen im setup auf. setup wird einmalig abgearbeitet.
> loop wird ständig abgearbeitet. Man kann es auch in loop schreiben und
> sich mittels einem bool selbst aus dem Rennen nehmen lassen wenn alles
> fertig ist. Je nach Geschmack. Ersteres finde ich übersichtlicher.
>
> setup kannste meinetwegen mit einer while solange blockieren wie all das
> was mit dem Taster abgearbeitet werden soll fertig ist. Dann verlässt du
> while und die loop kann wie bisher auch sein Ding machen.
>
> Idee ist wie folgt.
> Taster in setup abfragen, wenn gedrückt ein bool auf true setzen. Nennen
> wir es tasterAktiv. dann folgt meinetwegen am Ende von setup ein
> while(tasterAktiv) { ... }.
> In diesem while machste das was du tun musst. Wenn alles fertig ist
> setzt du tasterAktiv auf false und die while wird verlassen und die loop
> ist dran.
>
> Ob die Funktionen im Sketch oben oder unten stehen in der Reihenfolge
> ist in der Arduino IDE egal. Die baut sich die Funktionsprototypen
> selbst zusammen. Entscheidend ist was in setup / loop steht bzw.
> aufgerufen wird.

Danke, so genau wusste ich das noch nicht. Das Setup steht bei diesem 
Sketch fast am Ende. Dort habe ich meinen Teil reingeschrieben. Intuitiv 
habe ich es dann wohl richtig gemacht.

Dass ich die Taste beim Einschalten gedrückt halten muss, ist von mir so 
gewünscht. Geht ja nur um den seltenen Fall, wenn ich mal einen Sensor 
tausche. Ich denke dass irgendwann ein Anschlussdraht abbricht.

Wenn das Teil im Gehäuse ist, poste ich Foto.

Auf jeden Fall habe ich Lust bekommen mich mit weiteren Projekten zu 
beschäftigen und mich auch mal an ein eigenes Programm ran zu trauen.

von Alex D. (allu)


Lesenswert?

Peter D. schrieb:
> Ich würde lieber einen Kurzschluß auf den Sensorleitungen erkennen
> wollen und daher noch einen Widerstand opfern, z.B. für die Taste an
> MISO.

Dietmar S. schrieb:
> P4 scheint aber einfacher, das werde ich versuchen.
>
> Dass die Sensoren dabei unterbrochen werden, spielt keine Rolle, da ich
> den Taster nur einmalig drücke. Ich halte den Taster gedrückt und
> schalte das Thermometer ein. Den Zustand frage ich nur einmal bei
> Programmstart ab, das EEprom wird gleich zu Beginn gelöscht und ich kann
> ich die Sensoren wieder anlernen.

Einen dauerhaften Kurzschluß auf den Sensorleitungen bekommt er auch so 
mit, keine Ergebnisse mehr. Der Taster soll nur sehr selten während des 
Einschaltvorgangs gedrückt werden, noch bevor I2C gestartet wird. Gegen 
einen kleinen Schutzwiderstand von max. 220 Ohm in Reihe zu dem Taster 
spricht aber nichts.


Außerdem, einen externen I2C-Bus oder andere längere Zuleitungen zu den 
Ports würde ich ohne Schutzbeschaltung niemals einsetzen. Hat sich 
tatsächlich einmal bewährt. Bei einem Blitzeinschlag in der Nähe hatte 
es bei uns seinerzeit zahlreiche Elektrogeräte zerlegt. Bei meiner 
Hausmeldeanlage mit 5 verteilten Mikrocontollern und der "längsten 
Antenne" überhaupt, hat es nur einen Portpin von einem Mikrocontroller 
erwischt.

Bitte nur als Ratschlag verstehen, noch viel Spaß beim basteln ...

von Dietmar S. (Gast)


Lesenswert?

Alex D. schrieb:
> Gegen
> einen kleinen Schutzwiderstand von max. 220 Ohm in Reihe zu dem Taster
> spricht aber nichts.
>
> Außerdem, einen externen I2C-Bus oder andere längere Zuleitungen zu den
> Ports würde ich ohne Schutzbeschaltung niemals einsetzen.

Macht Sinn. Ich habe zwar nur kurze Zuleitungen, hantiere aber damit und 
habe hier ziemliche Probleme durch elektrostatische Aufladung.

von Allu (Gast)


Angehängte Dateien:

Lesenswert?

Folgende Schutzbeschaltung ist dem Mikrocontroller zur Überwachung 
unserer Heizung vorgeschaltet. Allerdings ist nur ein Sensor je Port 
angeschlossen bei 5V-Betriebsspannung. Sollte aber auch mit 4 Sensoren 
funktionieren, da die Dinger ohne Aufruf hochomig sind.

R1= Schutz gegen Kurzschluss der 5V
R2= Serienwiderstand zum Portpin, unterstützt von D1 und D7
R3= wired-or I2C
C1= Stützkondensator für I2C

Mit mehrenen Sensoren an einen Bus hatte ich beim Messen im Abstand von 
30sec leicht erhöhte Temperaturwerte festgestellt. Da genügend Portpins 
vorhanden waren, ist hier nur ein Sensor pro Portpin und Aufgabe 
angeschlossen.

von Allu (Gast)


Lesenswert?

Allu schrieb:
> R4= Schutz gegen Kurzschluss der 5V
> R5= Serienwiderstand zum Portpin, unterstützt von D8 und D9
> R6= wired-or I2C
> C3= Stützkondensator für I2C

Sorry, war der falsche Schaltungsausschnitt.

von Dietmar S. (Gast)


Lesenswert?

Kann ich nicht einfach eine Supressordiode nehmen?

von Allu (Gast)


Lesenswert?

Dietmar S. schrieb:
> Kann ich nicht einfach eine Supressordiode nehmen?

Kann ich leider nicht beantworten, habe ich noch nie ausprobiert.
Einen , weil auch I2C-Ausgang, kleinen Widerstand in Reihe würde ich dem 
Port-Pin schon spendieren.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

wo kommt denn jetzt plötzlich I2C her? Dietmar hat One Wire und SPI.
Ohne Kenntnisse des Aufbaus wie weit alles voneinander weg ist, kann man 
keine guten Tipps geben.

von Allu (Gast)


Lesenswert?

Veit D. schrieb:
> wo kommt denn jetzt plötzlich I2C her? Dietmar hat One Wire und SPI.
> Ohne Kenntnisse des Aufbaus wie weit alles voneinander weg ist, kann man
> keine guten Tipps geben.

Sorry, war ein Schreibfehler. Bitte I2C im Kopf gegen one Wire tauschen. 
Die Anschaltung ist für One Wire DS-Temperatursensoren ausgelegt.

von mIstA (Gast)


Lesenswert?

Allu schrieb:
> Sorry, war ein Schreibfehler. Bitte I2C im Kopf gegen one Wire tauschen.

Außerdem bitte den oben irrtümlich geposteten, falschen 
Schaltplanausschnitt im Kopf gegen den richtigen, leider unbekannten 
Schaltplan tauschen.  ;)

von Alex D. (allu)


Lesenswert?

mIstA schrieb:
> Allu schrieb:
>> Sorry, war ein Schreibfehler. Bitte I2C im Kopf gegen one Wire tauschen.
>
> Außerdem bitte den oben irrtümlich geposteten, falschen
> Schaltplanausschnitt im Kopf gegen den richtigen, leider unbekannten
> Schaltplan tauschen.  ;)

Der Schaltplan ist richtig, ich habe von den 6 gleichen 
One-Wire-Anschlüssen aus versehen den  3. statt dem 1. Ausschnitt 
erwischt und damit falsche Bauteilnummern eingetragen. Habe ich leider 
zu spät bemerktst aber direkt darunter korrigiert. Falls Du jetzt noch 
wissen willst warum 4 Anschlüsse, die Masse ist doppelt ausgeführt.

von Dietmar S. (Gast)


Lesenswert?

Alex D. schrieb:
> Gegen
> einen kleinen Schutzwiderstand von max. 220 Ohm in Reihe zu dem Taster
> spricht aber nichts.

Was oder wovor soll der 220 Ohm-Widerstand schützen?

von Dietmar S. (Gast)


Angehängte Dateien:

Lesenswert?

Zugegeben, es sieht ein wenig aus, wie ein amerikanischer 
Anrufbeantworter aus den 1980ern...

Auf jeden Fall funktioniert es jetzt wie gewünscht und ich kann mir 4 
Temperaturen anzeigen lassen. Der "Anlerntaster" ist auf der Rückseite. 
Den Code habe ich auch noch etwas verändert (aber nicht weiter 
dokumentiert).

Die DIN-Buchse ist für die Spannungsversorgung. Habe mir irgendwann für 
solchen Kleinkram ein Universalnetzteil gebaut mit 5/9/12V. An der 
DIN-Buchse sind alle Spannungen vorhanden. Egal welche Spannung benötigt 
wird, einfach reinstecken, passt immer.

von Gerald K. (geku)


Lesenswert?

Gute Idee und gute Umsetzung. Gibt es Erfahrung mit der Reichweite der 
Sensoren? Sind abgeschirmte Sensorleitungen notwendig?

Tipp für für den "Anlerntaster". Ich habe in solchen Fällen einen 
Reedkontakt verwendet. Dieser kann am Print verbaut werden und mit einem 
Magnet durch's Gehäuse aktiviert werden.

Vorteil : man spart sich die Bohrung im Gehäuse, der Reedkontakt ist 
billiger als der Taster, es kann kein Schmutz eindringen, weniger 
Probleme mit ESD und der Taster kann nicht unabsichtlich betätigt 
werden.

https://www.mouser.at/ProductDetail/MEDER-electronic-Standex/GP560-10-15/?qs=%252B6g0mu59x7JtDJpQb1U9ag%3D%3D

: Bearbeitet durch User
von Dietmar S. (Gast)


Lesenswert?

Sorry, eben erst gelesen. Benachrichtigungen kommen leider auch nicht an 
wenn man uC.net bei GMX auf die Whitelist setzt.

Gerald K. schrieb:
> Gute Idee und gute Umsetzung. Gibt es Erfahrung mit der Reichweite der
> Sensoren? Sind abgeschirmte Sensorleitungen notwendig?

Der Entwickler schreibt dazu: "You can connect to the temperature 
sensors using twisted-pair cables of several metres; with long cables a 
linear topology is recommended rather than a star configuration."

Ich habe meine noch nicht angelötet. Nehme dafür ein dünnes 
abgeschirmtes Audiokabel, was bei 50cm sicher nicht nötig ist, aber es 
liegt gerade auf der Werkbank.

> Tipp für für den "Anlerntaster". Ich habe in solchen Fällen einen
> Reedkontakt verwendet. Dieser kann am Print verbaut werden und mit einem
> Magnet durch's Gehäuse aktiviert werden.

Oh man...Hand vor den Kopf schlag. Die Idee kam mir sogar, aber ich habs 
irgendwie wieder vergessen. Jetzt wo Du Reedkontakt erwähnst, fällt es 
mir auch spontan wieder ein. Das Drücken des Tasters hat ja zum Glück 
nur beim Start Auswirkung. Deshalb habe ich ihn auch nicht vertieft ins 
Gehäuse gesetzt.

von Gerald K. (geku)


Lesenswert?

Dietmar S. schrieb:
> Das Drücken des Tasters hat ja zum Glück
> nur beim Start Auswirkung. Deshalb habe ich ihn auch nicht vertieft ins
> Gehäuse gesetzt.

Wirklich?

Was passiert wenn etwas unter BOX liegt, z.B. ein Bierdeckel, der 
dauerhaft auf den Kontakt drückt. Wenn ich die Funktion richtig 
verstanden habe, dann ist der BUS zu den Sensoren lahm gelegt, oder?

So gesehen ist es besser den Taster zu versenken.

: Bearbeitet durch User
von Dietmar S. (Gast)


Lesenswert?

Gerald K. schrieb:
> Was passiert wenn etwas unter BOX liegt, z.B. ein Bierdeckel, der
> dauerhaft auf den Kontakt drückt.

Bei dem Fliegengewicht der Box und dem Druckpunkt des Tasters müsste 
aber schon noch ein Stein Bier auf der Box stehen ;)

Gerald K. schrieb:
> Wenn ich die Funktion richtig
> verstanden habe, dann ist der BUS zu den Sensoren lahm gelegt, oder?

Genau. Aber wen interessiert's, das ist ein Hobbyprojekt. Wenn die 
Anzeige einfriert, nehm ich das Bierglas halt wieder runter. Hab's 
probiert, die Anzeige aktualisiert sich dann wieder und alles ist wieder 
gut.

von Teo D. (teoderix)


Lesenswert?

Saag des Mistding obe und saufsder mit der Maß schee!

von Peter D. (peda)


Lesenswert?

Gerald K. schrieb:
> Was passiert wenn etwas unter BOX liegt, z.B. ein Bierdeckel, der
> dauerhaft auf den Kontakt drückt. Wenn ich die Funktion richtig
> verstanden habe, dann ist der BUS zu den Sensoren lahm gelegt, oder?

Wie schon gesagt, deshalb würde ich den Taster über einen Widerstand mit 
an einen LCD-Pin legen. Aber das kostet eben einen Widerstand mehr.

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.