Ben van plan een twee kanaals dimmer te maken mbv een PIC 16F877. De PIC dient tevens als schakelklok en er hangt een LCD met bedieningsknopjes aan. Nu dacht ik aan het volgende:
-Een nuldoorgangdetectie geeft een pulsje aan de interrupt ingang,
-Timer waarde in TMR 0 zetten (aantal us delay)
-Bij interrupt van TMR 0 een pulse aan een triac geven waardoor hij gaat geleiden
-Bij de volgende nuldoorgang is de stroom door de triac 0 ampere waardoor hij spert

Dit lijkt mij vrij eenvoudig te maken, het probleem komt pas kijken wanneer ik een tweede triac onafhankelijk wil aansturen. Er is een tweede timer die een interrupt genereert (of doet TMR1 dit wel wanneer hij naar de tweede byte gaat overlopen?)

Wil liever geen gebruik maken van delay commando's omdat ik de PIC nog andere dingen wil laten doen, bv kijken of mijn lamp op dat tijdstip wel aan mag staan. Het leek me dan ook handig om de dim functie, met uitzondering van de waarde van TMR0 bepalen, volledig in de interrupt routine af te handelen.

Alle suggesties zijn welkom, ik hoef geen uitgewerkt programma(mag natuurlijk wel), gaat me voornamelijk om de manier van aanpak, programeren lukt me doorgaans wel(in picbasic dan).

Maak een pwm uitgang waarvan de waarde afhankelijk is van je gewenste lichtsterkte.

Laag doorlaat filtertje erachter.
Een rampgenerator die synchroon loopt aan het net.
Comperatortje en een optotriac.
Pwm kan je doen met de harware timer en dan op 8 kanalen tegelijk met elke gewenste waarde.Dan houd je tijd zat over om wat dan ook te doen.

Zoek maar eens op Rampgenerator hier op co.

De rampgenerator en comparators zijn overbodig.
Je gebruikt de externe interrupt lijn om te synchroniseren met het net, vervolgens start je 1 interne timer (TMR2 bv) waarmee je in software N kanalen kan dimmen.

je zorgt dat je timer 255 keer per halve sinus een interrupt maakt.

in die interrupt tel je 1 op bij een eigen tellerbyte die je bij elke 0-doorgang op 0 zet.

dan zet je alle uitgangen op 0.

dan vergelijk je dit met elke byte van elke dimmer, als de teller groter is dan de eigen byte per uitgang dan maak je de uitgang hoog.

bij een eigen byte per uitgang van 255 is hij uit en 0 is aan, dus wel omgekeerd, anders moet je met de tellerbyte 1 afhalen steeds vanaf 255

Een linkje wat misschien tot inspiratie kan dienen.

Vreemd, bij mij doet ie 't gewoon, dit is de link:
http://www.geocities.com/ph_zone/Digi_Pack/Digi_Pack.html

EDIT: er is inderdaad iets vreemds mee, met Mozilla doet'ie 't wel, met Internet explorer niet.

[Bericht gewijzigd door Zonnepaneeltje op ]

The GeoCities web site you were trying to view has temporarily exceeded its data transfer limit. Please try again later.

staat er hier...

Nu doet hij het bij mij ook.
Het schema is iig niet het beste schema.
De 7812 en opvologende 78xx worden niet gebuffert dat kan volgens mij nooit een mooie uitgang worden.

Op 16 november 2006 16:09:46 schreef The Headhunter:
Maak een pwm uitgang, Laag doorlaat filtertje, rampgenerator, comperatortje en een optotriac.

Is een oplossing, maar los het liever in de software op.

Op 16 november 2006 16:38:23 schreef rimco:
bij 0-doorgang timer 0 starten, alle uitgangen 0
timer 255 keer per halve sinus een interrupt
in interrupt tellerbyte+1
vergelijk dit met byte van dimmer

Ja rimco dat is em, is in een paar regels te programeren. De link van zonnepaneeltje werkt met hetzelfde principe.

Ik ga eens wat proberen

Je kan, bij het begin van de interrupt-routine, eerst alle uitgangen resetten, en vervolgens de uitgang setten v/d triac die actief moet worden. Zo krijgen de triacs automatisch een puls die 1/255 sec. duurt.
Wel opletten op het eind v/d halve sinus! Een late ontsteekpuls kan de triac gedurende de volgende halve sinus in geleiding houden.

je hebt die interrupt 255x per halve sinus nodig, je reset alle uitgangen ook 255x per halve sinus.

effectief zullen ze alleen na hun set na een hele korte periode gereset worden. daarom dus meteen in het begin bij de volgende check.