Forum: Mikrocontroller und Digitale Elektronik PIC 16F84A / Daten-EEPROM-Fehler


von hro (Gast)


Lesenswert?

Liebe Gemeinde,

folgendes Problem:
Fuer die Ueberwachung einer Netzspannung (230V) wird diese als Pegel 
ueber einen Optokoppler gesiebt an einen PIC 16F84A angeschlossen 
(CNY17, Eingang mit antiparalleler Diode und Vorwiderstand, Ausgang C 
mit 10uF). Sobald ich das mache, faellt die Datenuebertragung (RS485 
optoisoliert) aus.
Das Einlesen des PICs hat ergeben, dass jeweils immer das erste Byte des 
Daten-EEPROMs veraendert wird. Dieses ist Bestandteil der Busadresse.
Messungen haben ergeben, dass der Ausgang des Netzspannungswandlers 
potentialfrei ist (Phasenpruefer). Das Oszi (ohne Trenntrafo) zeigt am 
Ausgang +/-3V  an, welche an den PIC mit ca. 1kOhm angekoppelt werden.
Versorgung des PICs per AC/DC-Wandler 230V/12V und 7805.

Meine Frage:
Kennt jemand ein solches Problem?
Abhilfe?

Gruss hro

von nullchecker (Gast)


Lesenswert?

Was möchtest du denn dedektieren ?
230 V / AC vorhanden Ja/Nein, oder Spannungsschwankungen (200-240V)?

Wie sieht die Firmware aus, stelle mal deinen Quelltext und dein
Schaltbild der Schaltung hier ein.

RS485 hat der 16F84A nicht, also per Hardware un Software gemacht.
Welchen Port hast du dafür verwendet (USART hat der F84 keinen).

EEPROM (internes des 16F84A) benötigt Zeit zum Schreiben und sollte 
währenddessen auch nicht Unterbrochen werden. Man kann ein Flag
EEPROM Schreiben fertig Ja/Nein einfügen um solche Fehler zu vermeiden.

NC

von hro (Gast)


Lesenswert?

nullchecker schrieb:
> Was möchtest du denn dedektieren ?
> 230 V / AC vorhanden Ja/Nein, oder Spannungsschwankungen (200-240V)?
230V vorhanden oder nicht
>
> Wie sieht die Firmware aus, stelle mal deinen Quelltext und dein
> Schaltbild der Schaltung hier ein.
Mit der Firmware hat das nix zu tun.
>
> RS485 hat der 16F84A nicht, also per Hardware un Software gemacht.
> Welchen Port hast du dafür verwendet (USART hat der F84 keinen).
Laeuft ueber Port B und LTC485  und ist schon viele Jahre erprobt.
>
> EEPROM (internes des 16F84A) benötigt Zeit zum Schreiben und sollte
> währenddessen auch nicht Unterbrochen werden. Man kann ein Flag
> EEPROM Schreiben fertig Ja/Nein einfügen um solche Fehler zu vermeiden.
Es wird zu der Zeit gar nicht geschrieben. Die Adresse wird beim 
Programmieren des uC mit geschrieben.

Ich behaupte mal, dass es sich um ein Hardwareproblem handelt.

Gruss hro

von Anja (Gast)


Lesenswert?

hro schrieb:
> Kennt jemand ein solches Problem?
> Abhilfe?

Schau mal ins Errata-Sheet. Bei irgendwelchen Uralt-Prozessoren habe ich 
mal gelesen daß bei Schreibzugriffen aufs EEPROM das Adressregister 
gelöscht wird wenn während des Schreibzugriffs auf eine beliebige Zelle 
ein Reset ausgelöst wird. Der angefangene Schreibzugriff landete dann in 
Adresse 0 des EEPROMS.

-> bei diesen Prozessoren Adresse 0 nicht belegen

Beim Kopieren ins RAM wird es sowieso einfacher wenn EEPROM und RAM 
gleiche Adressen haben.

Gruß Anja

von jule (Gast)


Lesenswert?

Schreibfehler beim Programmieren?

von hro (Gast)


Lesenswert?

Anja schrieb:
> daß bei Schreibzugriffen aufs EEPROM das Adressregister
> gelöscht wird wenn während des Schreibzugriffs auf eine beliebige Zelle
> ein Reset ausgelöst wird.

wie gesagt: Es wird nicht in den EEPROM geschrieben. Zumindest nicht von 
der Firmware.

Mein Verdacht ist eher, dass durch den negativen Strom an Ports A0 (-3V 
/ 1KOhm) die erste Speicherzelle veraendert wird. Es scheint auch nur 
ein Bit zu sein.

Gruss hro

von hro (Gast)


Lesenswert?

jule schrieb:
> Schreibfehler beim Programmieren?

Nein, solange ich o.a. Schaltung nicht an den PIC anschliesse, 
funktioniert ja alles.

Gruss hro

von Anja (Gast)


Lesenswert?

hro schrieb:
> Mein Verdacht ist eher, dass durch den negativen Strom an Ports A0 (-3V
> / 1KOhm) die erste Speicherzelle veraendert wird. Es scheint auch nur
> ein Bit zu sein.

Ich hatte schonmal deutliche ADC-Messfehler durch negativen Strom an der 
seriellen Schnitttstelle bei einem PIC12F675 (-12V / 100 kOhm). Abhilfe 
brachte eine Schottky-Diode an der seriellen Schnittstelle um die 
negativen Spannungen zu kappen.

Gruß Anja

von hro (Gast)


Lesenswert?

Anja schrieb:
> Abhilfe
> brachte eine Schottky-Diode an der seriellen Schnittstelle um die
> negativen Spannungen zu kappen.

Ja, ich habe auch schon daran gedacht, die neg. Spannung mit einer Diode 
kurzzuschliessen. Aber interessant waere es in jedem Fall, ob und falls 
ja, warum der EEPROM von einer neg. Eingangspannung veraendert wird.

Das macht einem ja Angst und Bange, wenn sich da mal ein Impuls auf die 
Platine verirren sollte.

Gruss hro

von nullchecker (Gast)


Lesenswert?

Nun ich würde auch nicht gerade das Antiqariat der Mikrocontroller
dafür verwenden.

Teste doch mal mit einer Diode im Detektorkreislauf:

               |
O---->|------==| PortB X
               |

So gelangt der negative Anteil nicht auf den Port(Tri-State).

Oder falls die Spannung dann nicht Ausreichen sollte eine Graetzbrücke
(Gleichrichter) nach dem CNY17.

NC

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.