Forum: Mikrocontroller und Digitale Elektronik Problem mit ATmega128 / Bascom


von Karl J. (calibra301)


Lesenswert?

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

von Daniel H. (Firma: keine) (commander)


Lesenswert?

Karl J. schrieb:
> Irgendjemand ne Idee wo ich noch suchen könnte ?

Ja, in Quellcode, Schaltplan und Bildern vom Aufbau.

von Karl J. (calibra301)


Lesenswert?

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
von Hubert G. (hubertg)


Lesenswert?

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.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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
von Karl M. (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

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
Noch kein Account? Hier anmelden.