Hallo, ich habe eine Triggerschaltung für TOV-Prüfung (Temporary Overvoltage) entwickelt und nach DIN muss die Triggerung bei 90° stattfinden. Um die Schaltung auch für andere Prüfungen verwenden zu können haben wir uns entschlossen alle Werte beliebig einstellen zu können. Bei der Netzsynchronisation hackts nun. Meine ursprüngliche Idee funktioniert leider nicht. Hier die Idee: Ein Timmer (555) erzeugt eine frequenz von 18kHz, diese Frequenz geht direkt auf einen Eingang des µC (PIC16F9876 28Pin mit 20Mhz Quarz). Ein Optokoppler liefert mir beim Netznulldurchgang ein Hight Signal (Fließt ein Strom durch die Diode habe ich LOW) Wegen der Diode nur zur pos. Halbwelle der Netzspannung. Zusammengefasst kann man sagen dass der PIC in der zugewiesenen Zeit mit der 555er Zählen sollte bis ein eingestellter Wert erreicht ist. Dadurch würde sich dann eine passende verschiebung zur Netzfrequenz ergeben. Durch die mögliche Veränderung des Wertes hätte man eine schöne 0-360° Einstellmöglichkeit. (20ms von 18kHz sind 360) Allerdings zählt der PIC einfach nicht, anscheinend kann er nicht so schnell zählen. Hat wer eine Idee was ich machen könnte bzw. gibts da nen Baustein oder stimmt was mit meinem PIC nicht? Das Programm hat ca 8200 Zeilen. MFG
Was soll der Unsinn, nen 555 an nen MC anzuschließen, der hat doch selber haufenweise Timer. Und am Quarz sind die auch deutlich stabiler als ne alte 555 Gurke. Zu Deinem SW-Problem: Zeile 42 (ohne Code kann keiner hellsehen) Peter
Hmm da magst du schon recht haben. In der angehängten Datei ist meine programmierung eines timers (in diesem fall Tp=50ms also 20hz) recht höher als 500hz komm ich irgendwie nicht? ne ahnung wie ich auf so ca. 18kHz käme?
ehrnsperger schrieb: > In der angehängten Datei ist meine programmierung eines timers (in > diesem fall Tp=50ms also 20hz) Oje, PIC-Assembler, das ist mir zu kompliziert. Da kann ich leider nicht helfen. > recht höher als 500hz komm ich irgendwie nicht? > > ne ahnung wie ich auf so ca. 18kHz käme? Mit Polling in der Mainloop wird das wohl nix. Ein Timer kann mit dem CPU-Takt zählen, also 5MHz. Dann setzt Du nen Interrupthandler für den Überlauf auf. Falls die Zeit einstellbar sein soll, häng ein Poti an nen ADC-Engang und der liefert dann den Reloadwert zum Starten des Timers. Ich hab mal sowas ähnliches gemacht mit nem ATtiny25, allerdings in C geschrieben. Der hat dann gleich die Periodendauer gestoppt und automatisch zwischen 50Hz und 60Hz umgeschaltet. Quasi ne SW-PLL. D.h. ein Potiwert hat immer die gleiche Phasenverschiebung ergeben. Peter P.S.: Nen PIC16F9876 finde ich nicht.
Ja ich tu mich leider auch ziemlich schwer in assembler.. Dass der Zähler nicht richtig zählt macht mich schon sehr stutzig..
chris wird wohl zeit dass du wieder in die schule gehst und deutsch lernst.. weisst du was eine ellipse ist? (tipp - ist ein rhetorisches mittel)
Leider verstehe ich assembler, aber ich verstehe nicht, wie man so was programmieren kann. Naja, erzähl mal, wie der Timer initialisiert ist, usw, und auf was du da eigentlich testen willst, und wiso du den test mit carry und nicht mit Z Flag machst ? Noch wichtiger, wiso kein Interrupt und nur ein Polling, was unter aller säue ist.
Hallo, vielleicht hilft das folgende: vor ein paar Jahren experimentierte ich mit uC Phasenanschnittsteurung fuer einen TRIAC zur Motorsteuerung. Assembler war nicht notwendig und alles wurde in C geschrieben. Bei mir wurde ein PIC18F452 eingestezt; ein PIC16F876 sollte aber kein Problem sein. Bei mir ist uebriegens die Netzfrequenz 60Hz. Hier die Beschreibung der Hardware: 100HZ (120HZ) Interrupt auf INT (RB0). TIMER1 intern vom 16MHZ Quartz mit 1MHZ (1us) getaktet. (Quarz / 4, Prescaler 1:4) MIT dem COMPARE MODE Interrupt die gewuenschte Phasendifferenz einstellen (10us bis 20000us (20ms). Bevor die Interrupts global enabled werden, natuerlich TIMER1 auf 0 setzen und den COMPARE Wert entsprechend fuer den Startup einstellen. Wenn das nicht gemacht wird, kann natuerlich ein ungewuenschter Ausgangspuls vorkommen. Wenn der COMPARE interrupt aktiv ist, den TRIAC (oder Deine HW) mit einem PORT Ausgang ansteuern und den Timer auf Null setzen. Ausser der COMPARE ISR und Netz ISR(100Hz) funktioniert das ganze vollautomatisch und der uC kann 99.999% schlafen oder mit dem User Interface aktiv sein. Mit diesem Konzept kann man also relativ vom Nulldurchgang der Netzspannung jede gewuenschte Zeitverzoegerung oder Phasendifferenz mit Quarzgenaugigkeit in 1us Schritten fein einstellen. Jedenfalls hat dieses Konzept bei mir 100% zuverlaessig funktioniert. mfg, Gerhard
Vielen Dank für deine Hilfe, genau so möcht ichs auch machen. bekomm allerdings die programmierung nicht richtig hin.. schau morgen nochmal wie ichs mache und dann werd ich mir was anderes überlegen müssen..
Hallo, anbei ein paar Unterlagen um Dir etwas auf die Beine zu helfen;-) mfg, Gerhard
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.