Moin, ich habe eine ATTiny13 und eine Teensy (4.0 bzw. 4.1). Der Tiny sitzt auf einem extra Board und ist dort für das Ein-/Ausschalten des Boards zuständig (Selbsthaltung). Das Board enthält dann noch Spannungswandler für 5V, 3.3V, LED und Button, diversen Kleinkram. Über den Button möchte ich auf dem Teensy verschiedene Modi auslösen (Pairing, Default-Werte, ...). Der Wechsel auf dem Tiny funktioniert über kurzes bzw. langes drücken das Buttons. Der dazu nötige Code funktioniert soweit. Mein Problem ist eigentlich die Kommunikation zum Teensy. Dazu setze ich die Pins PB3, PB4 und PB5 (Fuse ist gesetzt). Diese gehen 1:1 ohne irgendwas an den Teensy und der reagiert an den Eingängen nicht. Meine Vermutungen: -> der Tiny wird mit 5V betrieben, an den Pins kommen 5V raus, ist für den Teensy am Eingang ggf. zu hoch -> ich sollte evt. noch die Leitungen mit 1k zu GND verkuppeln, dachte eigentlich das im Tiny/Teensy das automatisch geregelt wird -> den Tiny mit 3.3V betreiben Was ist am sinnvollsten? danke, mogel
Ronny G. schrieb: > Tiny wird mit 5V betrieben, Ronny G. schrieb: > Diese gehen 1:1 ohne irgendwas an den Teensy und der reagiert an den > Eingängen nicht. Eingänge des Teensy kaputt.
Ronny G. schrieb: > Meine Vermutungen: > -> der Tiny wird mit 5V betrieben, an den Pins kommen 5V raus Mach aus Vermutungen Gewissheit und miss einfach mal nach. > -> ich sollte evt. noch die Leitungen mit 1k zu GND verkuppeln, Wie kann man sich das schaltungstechnisch vorstellen? Und was ist der Zweck der Aktion? > dachte eigentlich Denken strengt an und bringt oft Fehler. Ich lese deshalb einfach das Datenblatt. Evtl. steht da die Lösung und ich muss mich nicht anstrengen. > das im Tiny/Teensy das automatisch geregelt wird Wie würdest du denn so einen "Automatimus" steuern, wenn du der Teensy-Entwickler wärst? > Was ist am sinnvollsten? Sorge dafür, dass passende Pegel an den Pins anlegst. Wenn eine Möglichkeit ist, die beiden Teilnehmer entsprechend zu versorgen, dann nimm die. Mario M. schrieb: > Ronny G. schrieb: >> Diese gehen 1:1 ohne irgendwas an den Teensy und der reagiert an den >> Eingängen nicht. > Eingänge des Teensy kaputt. Ich würde da einfach mal nachmessen.
Moin, der Tiny wird mit 3.3V versorgt und liefert an den Pins nun entsprechend 3.3V. Da war also ein Fehler. Nach einigen Tests und einem KSKB funktionieren die Pins aber mein Code nicht.
1 | uint8_t Modeline::getModeline() { |
2 | uint8_t mode0 = 1 - digitalRead(PIN_MODELINE_0); |
3 | uint8_t mode1 = 1 - digitalRead(PIN_MODELINE_1); |
4 | uint8_t mode2 = 1 - digitalRead(PIN_MODELINE_2); |
5 | return (((mode2 << 8) + mode1) << 8) + mode0; |
6 | }
|
Wenn ich nötige Bits raus schiebe, dann kann das auch nix werden -.- danke, mogel
Ronny G. schrieb: > Mein Problem ist eigentlich die Kommunikation zum Teensy. Dazu setze ich > die Pins PB3, PB4 und PB5 (Fuse ist gesetzt). Diese gehen 1:1 ohne > irgendwas an den Teensy und der reagiert an den Eingängen nicht. Üblich wäre eine serielle Schnittstelle, Rx/Tx oder SPI. Und ein Pegelwandler. Bei Rx/Tx reicht unidirektional, bei SPI muss er bidirektional sein. https://www.amazon.de/Converter-Pegelwandler-BiDirektional-Raspberry-Mikrocontroller/dp/B07DKT9JXT/ref=asc_df_B07DKT9JXT/ Warum meinst du, ist deine nicht-funktionierende Lösung die mehr Pins belegt besser ?
Ronny G. schrieb: > uint8_t > return (((mode2 << 8) + mode1) << 8) + mode0; Die schiebst die Bits viel zu weit. In einem 8 Bit Register darfst du insgesamt maximal 7x schieben. Vielleicht ist es so verständlicher: return 4*mode2 + 2*mode1 + 1*mode0;
MaWin schrieb: > Warum meinst du, ist deine nicht-funktionierende Lösung die mehr Pins > belegt besser ? SPI belegt auch 3 Leitungen. Da ich aber mit den drei Leitungen wirklich nur die Information über den Modus-Wechsel rüber schicke, halte ich SPI für Overkill (mal abgesehen davon das der Tiny schon mit 75% voll ist).
1 | void setModelines(PCUMODE mode) { |
2 | // neuen Modus an Teensy melden
|
3 | chgLED(PIN_MODELINE0, (mode & (1 << 0)) != 0); |
4 | chgLED(PIN_MODELINE1, (mode & (1 << 1)) != 0); |
5 | chgLED(PIN_MODELINE2, (mode & (1 << 2)) != 0); |
6 | // etwas Zeit verplempern
|
7 | cli(); |
8 | long_delay(1000); |
9 | sei(); |
10 | // Modus zurück setzen
|
11 | clrLED(PIN_MODELINE0); |
12 | clrLED(PIN_MODELINE1); |
13 | clrLED(PIN_MODELINE2); |
14 | pcuMode = PCUMODE_NORMAL; |
15 | }
|
Ich habe hier noch genug Kommunikation zwischen den beiden Teensy (via Bluetooth) und dann kommen noch Rechner bzw. Tablet (parallel, via Bluetooth). Stefan ⛄ F. schrieb: > return 4 * mode2 + 2 * mode1 + 1 * mode0; Die Variante sollte ich mir vielleicht für reine Bit-Sachen angewöhnen. Meistens zeihe ich aus irgend welchen Arrays 32 Bit Zahlen und die schiebe ich wie in meinem Code zusammen. War also ein "Gewohnheits-Fehler", dazu kommt noch Betriebsblindheit (da ich eher selten mit reinen Bits arbeite). hand, mogel
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.