Hallo Miteinander,
vielleicht kann mir jemand helfen?
Ich möchte das RFM12b an einen Atmega328 betreiben. Der RFM12B arbeitet
allerdings mit 3v3, der Atmega mit 5V.
Ein Spannungsteiler mit Widerstände kommt nicht in Frage.
Als alternative denke ich an einen Pegelwandler. Im Netz wie auch hier -
ein schon oft beschriebenes Thema.
Leider finde ich für mich keine vollständig erklärende Lösung.
Evtl. kann mir jemand eine gute Lösung verraten. Wenn er mir hierzu noch
eine entsprechende Beschaltung aufzeigen könnte, wäre ich sehr dankbar.
Grüße
amecke
Tach,
a) Pegelwandler:
1) Spricht was dagegen, den Atmega328 auch mit 3V3 zu betreiben?
2) Pegelwandler: Geht natürlich auch, aber selbst gekaufte sind auf der
HV->LV Seite häufig auch nur als Spannungsteiler realisiert.
3) Für Wagemutige: Der RFM12B rennt auch mit 5V sagt das Internetz. Aus
eigener Erfahrung kann ich das bestätigen, hatte mal einen für einige
Tage im 5V-Dauerbetrieb. Folgeschäden? Bisher keine, rennt seit Monaten
fehlerfrei mit Batteriespannung.
b) RFM12-Beispiele: Schon mal hier geguckt?
Beitrag "Beispielprogramm für RFM12 433MHz Funk-Module"
Vielen Dank für deine Antwort.
Im Augenblick spricht eigentlich nichts dagegen den Atmega328 mit 3,3V
zu betreiben. (...das zu schaltende Relais (SSR) arbeitet glaube mit
3...5V.)
Als Spannungsregler hätte ich jetzt einen L7805CV benutzt. Dieser regelt
allerdings die Spannung auf 5V.
Könntest du mir einen Regler nennen welcher auf 3,3V reguliert. Wie
würden dann hierzu die externe Beschaltung aussehen?
> Könntest du mir einen Regler nennen welcher auf 3,3V reguliert.
Nein, nicht ohne die Randbedingungen ( Vin, Aout ) zu kennen. Je grösser
die beiden, desto mehr Abwärme -> Package -> Kühlung.
-> Gugl + "Festspannungsregler 3.3V"
öffnet dir das ganze Universum. Oder aber im Online-Katalog eines
Versenders (Reichelt, Conrad, ... ), denn dort gibt es gleich die
Antwort auf deine zweite Frage:
> Wie würden dann hierzu die externe Beschaltung aussehen?
-> Datenblatt des von dir ausgewählten Spannungsreglers
meistens nur je ein Kondensator/Elko zwischen Vin/Vout und GND.
...es kann so einfach sein. ;-)
Habe jetzt den LM1117 bei reiche*t gefunden.
Würde folgendes Szenario funktionieren?
9V <--> L7805CV <-- (5V) --> Atmega328 (Betriebsspannung)
^
|
|----> LM1117 <-- (3,3V) --> RFM12B (Betriebsspannung)
An der Versorgungspannung von 9V zapfen sich einmal der L7805CV und der
LM1117 die Spannung ab.
...
Die 3,3V Datenleitungen (SPI) für die Ansteuerung des RFM12B realisiere
ich dann mittels Spannungsteiler.
amecke schrieb:> Die 3,3V Datenleitungen (SPI) für die Ansteuerung des RFM12B realisiere> ich dann mittels Spannungsteiler.
Auf einmal doch mit Spannungsteiler?
Nein, bzw. nicht vollständig mit Spannungsteilern.
Nur die Datenleitungen für den RFM12b:
-- MOSI (D in)
-- SCK (Clock)
-- SS (Select)
Den Rest schließe ich - bis auf die +3,3V Betriebsspannung des RFm12b -
direkt an den Atmega328.
Die +3,3V des RFM12b über den oben beschriebenen LM1117
Festspannungsregler.
amecke schrieb:> Den Rest schließe ich - bis auf die +3,3V Betriebsspannung des RFm12b -> direkt an den Atmega328.
Schon mal im Datenblatt des Atmega geguckt, wie hoch die Spannung sein
muss, die zuverlässig als H erkannt wird? Kann zwar funktionieren, ist
aber von "robust design" soweit entfernt wie Politik von Wahrheit.
katastrophenheinz schrieb:> Schon mal im Datenblatt des Atmega geguckt, wie hoch die Spannung sein> muss, die zuverlässig als H erkannt wird?
0,6*Vcc ;)
Vih ( die Spannung, die zuverlässig als H erkannt wird ) ist bei deiner
Beschaltung nur um 0.3 V überschritten. Im Normalfall funktioniert das.
Aber bei Störungen auf den Leitungen können diese 0.3V zuwenig sein und
stellen sich als schwer zu findende Fehlerquellen heraus.
Daher: Zum Ausprobieren gehts, aber für ein robustes Design würde ich
dir empfehlen, die Pegel der Ausgangsssignale vom RFM12 auf 5V
anzupassen
http://www.mikrocontroller.net/articles/Pegelwandler#3.3V_-.3E_5V
Ok, - verstehe!
Hmm..., die Pegelwandler auf der Erklärungsseite sind wohl eher schlecht
zu bekommen?!
Könntest du mir denn einen Pegelwandler empfehlen? Diese müsste ja dann
5 Eingänge und 5 Ausgänge haben.
amecke schrieb:> Als alternative denke ich an einen Pegelwandler.
Siehe Pegelwandler.
katastrophenheinz schrieb:> 1) Spricht was dagegen, den Atmega328 auch mit 3V3 zu betreiben?
Scheint mir die einfachste Lösung zu sein. Für den 328P kann ich 12,280
Mhz empfehlen, das ist Baudratenfreundlich. Wenn ich mich richtig
erinnere, ist der 328P bei 3.3V bis knapp 14 Mhz spezifiziert (safe
ratings). Das Datenblatt klärt mit einem Diagramm darüber auf.
amecke schrieb:> Könntest du mir denn einen Pegelwandler empfehlen? Diese müsste ja dann> 5 Eingänge und 5 Ausgänge haben.
Schau dir obigen Artikel an. Die 74AVC Familie scheint genau das zu
bieten.
> Könntest du mir denn einen Pegelwandler empfehlen? Diese müsste ja dann> 5 Eingänge und 5 Ausgänge haben.
Nein, du brauchst nur je zwei, denn die Richtung 5V->3.3V funktionieren
ja problemlos über Spannungsteiler.
Die Richtung 3.3->5V kannst du mit MOSFETs bauen, hier gibt's die
Schaltung:
http://www.sparkfun.com/datasheets/BreakoutBoards/Level-Converter-v10.pdf
oder mit einem 74HCT-Baustein: 74HCT125 ist zwar ein wenig oversized
(Bietet 4fach, du brauchst 2x), aber frisst ja kein Brot.
Nochmal vielen Dank für die Hilfen bisher.
Hier nochmal eine Skizze, wie ich ungefähr jetzt die Schaltung aufbauen
würde.
Evtl. kann der eine oder andere einige Tipps bzw. Ratschläge dazu
geben?!
...da ist jetzt was faul:
1) Du möchtest mit dem ...125 doch erreichen, daß der mega328
5V-Logigpegel an den Eingangsleitungen hat, die vom RFM12 kommen.
Erreichst du das mit deiner Schaltung?
2) Gleichzeitig willst du mit einem Spannungsteiler aus zwei
Widerständen erreichen, daß von den 5V-Ausgängen des mega328 nur noch
3,3V am RFM12 ankommen. Wieviele Volts kommen denn mit deiner Schaltung
bei logisch 1 am RFM12 an?
3) Der 74HCT125 hat Eingänge, die mit nichtG1...nichtG4 gekennzeichnet
sind. Hast du die auf dem Schirm?
4) Was hast du mit den Pins 20-22 vor, die jetzt unbeschaltet gemalt
sind?
Guck dir mal andere Designs an, wie die mit den Analog-Spannungen
umgegangen sind z.B. Arduino ( nicht gut )
oder den hier (besser):
http://download.chip45.com/Crumb168_328_V2.3_schematics.pdf
Für den Anfang tut die Arduino-Lösung ( AVcc = Vcc ), wenn du ernsthaft
mit den Analogfunktionen arbeiten willst, dann empfiehlt sich die
bessere Lösung, die ist genauso gebaut wie das Atmel-Manual das vorgibt.
> 1) Du möchtest mit dem ...125 doch erreichen, daß der mega328> 5V-Logigpegel an den Eingangsleitungen hat, die vom RFM12 kommen.> Erreichst du das mit deiner Schaltung?
Ja, das möchte ich erreichen. Ich dachte - ich würde das mit skizzierter
Schaltung erreichen?! Mein aktuelles Verständnis sieht so aus, das der
74HCT125 ein Pegelwandler ist. Dieser eine Pegelanpassung von 5V auf
3,3V und 3,3V auf 5V durchführt und ohne externe Beschaltung auskommt.
Schalte ich 5V an den Eingang A1 bekomme ich am Ausgang Y1 die
gewünschten 3,3V. Umgekehrt, also wenn ich 3,3V an Y1 lege an A1 5V
bekomme.
> 2) Gleichzeitig willst du mit einem Spannungsteiler aus zwei> Widerständen erreichen, daß von den 5V-Ausgängen des mega328 nur noch> 3,3V am RFM12 ankommen. Wieviele Volts kommen denn mit deiner Schaltung> bei logisch 1 am RFM12 an?
Die Spannungsteiler habe ich verworfen. Wie du ja schon erwähntest,
würde die Richtung atmega328 zu RFM12B rein Pegeltechnisch
funktionieren. Also per Spannungsteilerregel 5V auf 3,3V herunterteilen.
Eine logische 1 vom RFM12B von etwa 3,3V zum Atmega328 dagegen, könnte
bei Störungen nicht immer korrekt funktionieren. Daher der Einsatz des
Pegelwandlers.
> 3) Der 74HCT125 hat Eingänge, die mit nichtG1...nichtG4 gekennzeichnet> sind. Hast du die auf dem Schirm?
Ja, zumindest habe ich diese auf dem Datenblatt erkannt. Sagen mir aber
nicht wirklich etwas. Ich hätte jetzt vermutet das diese das Signal
invertieren?! Müssen diese Pins denn geschaltet werden? Oder per
Pullup-down Widerständen auf einen definierten Zustand gebracht werden?!
> 4) Was hast du mit den Pins 20-22 vor, die jetzt unbeschaltet gemalt> sind?
20 und 21 auf Vcc und 22 auf Gnd
amecke schrieb:
> Dieser eine Pegelanpassung von 5V auf> 3,3V und 3,3V auf 5V durchführt und ohne externe Beschaltung auskommt.> Schalte ich 5V an den Eingang A1 bekomme ich am Ausgang Y1 die> gewünschten 3,3V. Umgekehrt, also wenn ich 3,3V an Y1 lege an A1 5V> bekomme.
nicht ganz, der taugt nur für die Richtung 3.3 -> 5. Die Richtung 5->3.3
realisierst du am einfachsten über Spannungsteiler (je zwei Widerstände
mit passenden Werten in Reihe). Wenn du also die 3.3->5 nicht
realisieren möchtest, verzichte komplett auf den 125 und nimm
stattdessen 2x3 Widerstände für die Umsetzung 5->3.3
Warum geht 125 nicht für die Richtung 5->3.3? Logisch 1 am Ausgang ist
immer ein Spannungswert nahe Vcc, 0 immer nahe 0V. Wenn du den 125 also
mit 5V betreibst, kommen hinten auch 5V raus. Jetzt könnte man ja auf
die Idee kommen: "super, dann betreibe ich den mit 3.3V". Geht aber auch
nicht, weil 74hct125 nicht mit dieser Spannung spezifiziert und außerdem
darf ein Eingangssignalpegel nie deutlich höher als Vcc sein. Falls
doch, dann werden irgendwelche PN-Übergänge zum Substrat leitend, die
nie leitend werden dürfen und du baust aus der gesamten Chipfläche im
Grunde genommen nur noch eine Diode in Durchlassrichtung. Heute gibt es
Schutzschaltungen, die das verhindern, aber zu Anfangszeiten von CMOS
war das ein zuverlässiges Mittel, seinen Chip zu grillen.
Also würde ich an deiner Stelle einfach die Widerstände nehmen.
>Ja, zumindest habe ich diese auf dem Datenblatt erkannt. Sagen mir aber>nicht wirklich etwas. Ich hätte jetzt vermutet das diese das Signal>invertieren?! Müssen diese Pins denn geschaltet werden? Oder per>Pullup-down Widerständen auf einen definierten Zustand gebracht werden?!
Im Datenblatt steht in der Logiktabelle bei nichtG=1 am Ausgang ein Z.
"Z" steht für "Ausgang hochohmig". D.h. da kommt nur dann was raus, wenn
du nichtG auf 0v legst. Aber da du ja komplett auf 125 verzichten
kannst, brauchst du dich da nicht weiter drum kümmern.
>20 und 21 auf Vcc und 22 auf Gnd
Lass Aref erstmal unbeschaltet und mit 100nF gegen GND abblocken.
Ausserdem je 100nF zwischen Vcc und Gnd und Avcc und GND, möglichst
dicht am Chip, wenn möglich gleich unter den IC-Sockel verbauen.
Schließlich fehlt bei dir noch die Beschaltung des Reset-Pins und der
6pol. Pfostenstecker für die Programmierung über ISP. In dem verlinkten
Schaltplan von oben kannst du sehen, was dafür zu tun ist.
> Wenn du also die 3.3->5 nicht realisieren möchtest, ...
Das verstehe ich jetzt nicht. Du hattest doch die Problematik mit dem zu
kurzen Signalabstand angesprochen?
> ...Vih ( die Spannung, die zuverlässig als H erkannt wird ) ist bei deiner> Beschaltung nur um 0.3 V überschritten....> Daher: Zum Ausprobieren gehts, aber für ein robustes Design würde ich> dir empfehlen, die Pegel der Ausgangsssignale vom RFM12 auf 5V> anzupassen...
Deshalb die Erweiterung mit dem Pegelwandler (74HCT125).
Nach dem aktuellen Wissenstand würde jetzt die Schaltung wie folgt
aufbauen. (siehe Skizze)
Was ist jetzt mit den High-Signalen (3,3V) vom RFM12b? Bei schlecht
Wetter könnte der Atmega diese nicht als High erkennen. ;-)
...dann guck noch mal auf deinen handcrafted schematic, den du gestern
gepostet hast:
- Die Ausgangssignale des RFM12 ( MISO, IRQ ) gehen ohne irgendwas
dazwischen an Eingänge des 328. d.h. da kommen 3,3V an und dort müsste
der Pegelwandler dazwischen.
- Die Eingangssignale des RFM12 ( MOSI, SCK, SS ) kommen über den 125.
Da der aber auch an 5V hängt, sind die Pegel an dessen Ausgang immer
noch 0/5V. Also unverändert. Und am RFM12 kommt immer noch ein zu hoher
Pegel an. Da muss ein Spannungsteiler hin.
>Die Eingangssignale des RFM12 ( MOSI, SCK, SS ) kommen über den 125.>Da der aber auch an 5V hängt, sind die Pegel an dessen Ausgang immer>noch 0/5V.
Du hast Recht - das macht überhaupt keinen Sinn.
>Die Ausgangssignale des RFM12 ( MISO, IRQ ) gehen ohne irgendwas>dazwischen an Eingänge des 328. d.h. da kommen 3,3V an und dort müsste>der Pegelwandler dazwischen.
Stimmt! not(robust design)
...
Ok, - hier jetzt mein zweiter handcrafted schematic. :-)