Hallo, bastele hier was mit nem Atmega 128 / Bascom. Problem ist das ein Portpin an dem ein Relais hängt sporadisch abfällt. Im Sourcecode wird er an einer Stelle ein und an 4 Stellen ausgeschaltet. Es handelt sich um PortC.2, also einen normalen IO ohne irgendwelche Sonderfunktionen wie IRQ oder so.. Der 128er wird auch im richtigem Modus betrieben, das 103 Bit ist gelöscht. Zwecks Fehlersuche gebe ich auch nach dem Setzen/löschen des Ports seriell einen Status aus. Wenn die Portänderung gemäß Programmablauf kommt dann kommt diese Ausgabe auch aber nicht im Fehlerfall. Insgesamt fütter dieser Port 5 Relais. Alle anderen bleiben im Fehlerfall da wo sie sein sollen. Es gibt auch kein Reset oder so. Vcc ist sauber und mehrfach mit 100nF geblockt. Controller läuft auf 4Mhz intern. Irgendjemand ne Idee wo ich noch suchen könnte ? Danke und Gruss Calli
Karl J. schrieb: > Irgendjemand ne Idee wo ich noch suchen könnte ? Ja, in Quellcode, Schaltplan und Bildern vom Aufbau.
Da suche ich ja schon seit Ewigkeiten :-) Proz ist ein TQFP auf einer ordentlichen Leiterplatte. Also kein fliegender Aufbau. Versorgung per Steckernetzteil 12V -> 470yF -> SIL Schaltregler + gefordertem Low ESR am Ausgang. Proz selber hat an den VCC´s 4x 100nF Kerko 0805 Am Portpin hängt ein 1.5K Basiswiderstand / BC847 der die Spule eines Relais was selbstverständlich ne Freilaufdiode hat gegen GND zieht. Die Basis wird mit 2.7K runtergezogen. So sieht die Schaltung für alle Relais aus. Bascom Deklaration:
1 | |
2 | Config portc.2=Output |
3 | Relais4 alias Portc.2 |
4 | Relais4=0 |
Im Mainloop gebe ich nun stetig den Zustand aus:
1 | if Relais4 =1 then |
2 | Print"AD =1" |
3 | else |
4 | Print"AD =0" |
5 | end if |
Tritt der Fehler auf so wird der Portzustand auch korrekt angezeigt. Also statt 1 dann 0 Von diesen Relaisplatinen gibt's 3 Stk. alle zeigen das gleiche Verhalten. Gruss Calli
:
Bearbeitet durch User
Nachdem kaum jemand so eine Platine und die Software hat, wirst du schon mit etwas mehr herausrücken müssen. Entweder hast du in allen drei Platinen einen Fehler oder was ich eher glaube, du hast einen Softwarefehler. Also Schaltung, Layout und die gesamte SW mit guter Beschreibung.
Karl J. schrieb: > Tritt der Fehler auf so wird der Portzustand auch korrekt angezeigt. > Also statt 1 dann 0 Das ist kein Fehler, mit PortC.2 wird das angezeigt, was du geschaltet hast, nicht der tatsächliche Zustand des Pins. Wenn da also 0 eingelesen wird, hast du in deinem Programm auch irgendwo PortC.2 auf 0 gestellt. > Problem ist das ein Portpin an dem ein Relais hängt sporadisch abfällt. Nein, Problem ist, dass du diesen Pin irgendwo im Programm sporadisch abschaltest.
:
Bearbeitet durch User
Hallo ! Ist Dir dieses Verhalten bekannt ? Port C is an 8-bit bi-directional I/O port with internal pull-up resistors (selected for each bit). The Port C output buffers have symmetrical drive characteristics with both high sink and source capability. As inputs, Port C pins that are externally pulled low will source current if the pull-up resistors are activated. The Port C pins are tri-stated when a reset condition becomes active, even if the clock is not running. Port C also serves the functions of special features of the Atmel® AVR®ATmega128 as listed on page 76. In ATmega103 compatibility mode, Port C is output only, and the port C pins are not tristated when a reset condition becomes active. Note: The ATmega128 is by default shipped in ATmega103 compatibility mode. Thus, if the parts are not programmed before they are put on the PCB, PORTC will be output during first power up, and until the ATmega103 compatibility mode is disabled.
Hi >Ist Dir dieses Verhalten bekannt ? Karl Junkurt (calibra301) schrieb ausdrücklich: >Der 128er wird auch im richtigem Modus betrieben, das 103 Bit ist >gelöscht. MfG Spess
Karl J. schrieb: > Im Sourcecode wird er an einer Stelle ein und an 4 Stellen > ausgeschaltet. Das ist dein Fehler. Man macht das nur von einer Stelle aus, also eine Routine die die Relais ein/ausschaltet und nicht von verschiedenen Stellen.
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.