Hi, ich treibe per AVR über 330 Ohm ein Sharp SSR gegen Masse. Der AVR wird mit 5 V betrieben. Der Port wird mit PORTx=0; DDRx= (1<<SSRPIN); initialisiert. Komischerweise messe ich am Pin nur 1 V. Wat kann dat sein?
Welcher Controller genau? Welcher Pin? Ist es der Pin von der JTAG-Schnittstelle? Falls ja, muss diese deaktiviert werden.
> 1 V. Wat kann dat sein?
1V. Sind ähh... 1V. Was sonst?
Was erwartest Du denn da und wie kommst Du darauf das zu erwarten?
Vcc 4.9 V Tiny25, PB4 = 1.00 V S202S12: 1.2 V @ 20 mA Über dem SSR: 0.97 V Über den 330 Ohm : 36 mV -> 11,8 mA
Gast schrieb:
> Über den 330 Ohm : 36 mV -> 11,8 mA
Der arme Herr Ohm... 36mV bei 11,8mA gibt's bei 3,3 Ohm.
Was ab und zu vorkommt: Das jemand versehentlich DDR nicht setzt, oder
das falsche Bit, oder irgendwo wieder zurücksetzt. Dann zieht nur noch
der hochohmige Pullup hoch und es kommt genau sowas bei raus.
Wenn ich mal schnell ins Datenblatt vom SSR schaue will das mind. 6V. Da wird die Versorgung von 4,9V wohl nicht reichen, damit das Teil zuverlässig funktioniert. Dann hat PB4 ne Menge an Sonderfunktionen, z.B. Anschluss für Quarz und noch viel viel mehr. Mal die Fuses kontrollieren, ob der Pin wirklich als Ausgang konfiguriert ist.
Oh ja, der arme Herr Ohm :-) Mhh, ich forsche weiter. Danke jedenfalls für die Hilfsbereitschaft.
Wenn das SSR ein Optokoppler sein soll ( ich bin in Abkürzungen nicht so perfekt), schalte doch probeweise anstelle des Optokopplers eine LED an den Anschluss. Die leuchtet Dir dann schon heim, in bezug auf richtige Polung der LED oder auf richtigen Wert des Widerstands (330Ohm) oder auf Softwarefehler.
>Wenn das SSR ein Optokoppler sein soll.. Solid State Relays, nehme ich mal an. Außerdem tippe ich auch stark auf eine falsche DDRx def, will heißen: Der Pin ist wahrscheinlich ein Eingang mit aktiviertem Pullup. Wie ist denn Dein "SSRPIN" definiert? Und: wenn Deine Init so: >>DDRx= (1<<SSRPIN); aussieht, kann es sein, dass du zu einem späteren Zeitpunkt nochmal so etwas in der art machst? z.B: DDRx= (1<<EIN_WEITERER_PIN); das würde einiges erklären. Vielleicht mal Suchen und Ersetzen von DDRx = (1<<...); durch DDRx |= (1<<...); Werner
Oh je, es waren tatsächlich die Pullups. Es hat sich ein DDRB ^= ~(1<<BIT); eingeschlichen, das ^ muss natürlich ein & sein.. Danke, es läuft.
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.