| Autor |
PIC Lampendimmer Suche nach: pic (2060) |
|
|
|
|
BID = 150747
hansjüre Neu hier

Beiträge: 34
|
|
Nö der kostet bei meinem Elektronikhändler ca 23 Euro. |
|
BID = 151073
Nukeman Schriftsteller
    
Beiträge: 754 Wohnort: bei Kleve
|
|
Hi,
Quote:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Also heisst das jetzt dass ich die Schaltung ohne den IR Empfänger die LED und den Relaistreiber übernehmen kann und an einem Kanal nen Taster und am anderen den Dimmer ranhängen kann, ohne irgend einen Oszillator ranzubauen ?
Das mit dem Code würd ich dann etwa von http://www.sprut.de/electronic/pic/grund/pwm.htm übernehmen.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Richtig, das sollte so klappen.
Ich hatte nicht genau genug in die Spec geschaut, der
16F628 kommt auch ohne Quarz oder sonstige externe
Beschaltung aus. Der interne (RC-)Oszillator läuft dann
mit 4MHz. Für diese Anwendung reicht die Performance
allemal, zudem die PWM noch bequem in Hardware läuft.
Gruss,
Stefan
|
|
BID = 151397
hansjüre Neu hier

Beiträge: 34
|
Ok danke.
Warte immer noch auf den Controller, sollte in einer Woche eintreffen.
Kann ich evtl. schon n Programm schreiben und am PC simulieren ?. Habs mit MPlab mal versucht, kapier aber dort den Simulationsmodus nicht.
Gibts da vielleicht etwas grafisches ?
|
BID = 157095
hansjüre Neu hier

Beiträge: 34
|
So hab den ganzen Hardwarekram nun hingekrigt, jetzt kommt jedoch das grössere Problem, das Programm für den PIC.
Ich müsste irgendwie n PWM Signal erzeugen, welches durch drücken auf einen Taster langsam von 0 auf 100 prozent und umgekehrt wechsel und sobald ich den Taster loslasse stehen bleibt.
Nur wie stelle ich das nun an, hab keine Ahnung wie ich den PWM Ausgang am PIC nutzen kann.
Als Taktquelle möchte ich übrigens den internen Oszillator mit 4 Mhz nutzen.
|
BID = 157955
Nukeman Schriftsteller
    
Beiträge: 754 Wohnort: bei Kleve
|
Hi,
So würde die einfachste Lösung als C-Programm für Deinen
Pic aussehen:
| Code : |
bit bDirection;
#define MAX_DELAY 0x03 // 3 * 65ms Schrittgeschw.
#define TASTE (PORTB & 0x01) // PortB.0 = Key-Input
void main( void )
{
uns8 x;
// Initialisierung
TRISB = ~0x08; // Port B3 = (PWM)Output, alle anderen Bx auf Input
T2CON = 0x05; // Timer 2: Timer2 on, Prescaler 1:4 (arbeitet f. PWM )
PR2=0xFF; // pwm-freq statisch auf ca. 1 kHz
OPTION_REG=0x07; // Timer 0 Prescaler = 1:256 -> ovfl alle 65ms @ 4MHz
CCPR1L =PR2>>1; // Duty 50:50
CCP1CON = 0x0C; // Mode = PWM
while(1)
{
if(TASTE ) // Taste gedrückt
{
if( bDirection ) // aktuell rauf oder runter ?
{
if( ++CCPR1L == 0xFF) // Anschlag niedrigste PW ?
{
bDirection=0; // jetzt andersrum
}
}
else
{
if( --CCPR1L == 0x00 ) // Anschlag oberste PW ?
{
bDirection=1; // jetzt andersrum
}
}
}
for( x=0; x<MAX_DELAY; x++) // MAX_DEL * 65 ms warten, damit es
{ // nicht zu schnell geht
T0IF = 0;
while( ! T0IF ); // wir warten auf christkind
}
}
}
|
|
Ein Blick ins Datenblatt zur Funktionsweise der PWM
kann allerdings auch nie schaden
Gruss,
Stefan
Edit:
Wichtig : Der Watchdog muss abgeschaltet sein, sonst
fährt das Dingen zyklisch einen Reset.
[ Diese Nachricht wurde geändert von: Nukeman am 2 Feb 2005 0:55 ]
|
BID = 158259
hansjüre Neu hier

Beiträge: 34
|
Ok, genau das hab ich mir vorgestellt. Bis jetzt hab ich jedoch meine ersten Gehversuche immer mit MPLab gemacht, also in Assembler, C sieht jedoch viel übersichtlicher aus.
Mit welchem Programm kann ich diesen C code in ne Hex wandeln ?? Gibts da vielleicht n Freeware Programm ??
|
BID = 158336
Nukeman Schriftsteller
    
Beiträge: 754 Wohnort: bei Kleve
|
Hi hansjüre,
ich benutze den CC5X Compiler. Den gibt es vom Hersteller
zum freien Download mit der Beschränkung, dass man nur 1024
Assembler-Zeilen erzeugen kann (1k-Word ). Der Compiler
wird dann in das MPLAB integriert.
Den Compiler bitte mal im Netz suchen, hab die Seite gerade
nicht parat.
Wenn man sein Programm aus mehreren Modulen zusammenstellt,
kann man die 1k-Begrenzung de facto auch umgehen.
( Die Konfiguration dazu in MPLAB ist allerdings etwas
umständlich, aber mit 1k kommt man auch schon eine ganze
Ecke )
Angehängt habe ich eine ZIP-Datei, die den C-Code, den
daraus erzeugten ASM-Code und die wiederum daraus erzeugte
Hex-Datei enthält.
Das Programm ist noch ziemlich rudimentär. Du könntest
jetzt auch nur an der Assembler-Datei weiter arbeiten und
diese anschliessend (ohne Compiler) durch dein MPLAB jagen.
Gruss,
Stefan
|
BID = 158855
hansjüre Neu hier

Beiträge: 34
|
Ok danke, funktioniert wunderbar
Hab jetzt den Compiler auch in mein MPLab eingebaut und versucht den Code noch n bisschen zu ergänzen. Ich möchte noch irgendwie machen, dass wenn man die Taste kurz drückt das Licht sanft bis auf die gewählte Helligkeit angeht oder ausgeht und bei längerem drücken die Helligkeit wie im oberen Programm variert.
Man sollte dann also mit einem Taster sozusagen ein Dimmer mit sanft aus und anschalter haben.
Hab gedacht dass ich sobald die Taste gedrückt wird, in ne Schleife reingehe, welche den Dimmvorgang etwas verzögert und mit nem Kontrollbit festlege ob der Taster betätigt wurde, dass er in den Softstart Teil übergeht, wenn die Schleife nicht zu ende gelaufen ist.
Der aktuelle Stand des PWM Duty müsste in ner Variabel nach dem dimmen gespeichert werden, damit der Softstart dann auf diesen Wert hin fährt.
Leider weiss ich nicht wie man ne Variabel im Arbeitsspeicher ablegt und noch viel schlimmer, habs mit der Warteschleife einfach nicht hingekrigt.
Nach etlichem Probieren spielt jetzt sogar mein PIC verrückt. Irgendwie kann er den Eingang nicht mehr erkennen, hab einfach an RB0 n Taster gegen die Masse angehängt, kann es sein dass dies den Eingang zerstört hat ??
Nicht dass ich den nächsten Eingang auf die gleiche Weise verbrate
[ Diese Nachricht wurde geändert von: hansjüre am 4 Feb 2005 18:00 ]
|
BID = 159822
hansjüre Neu hier

Beiträge: 34
|
Also das mit dem Eingang geht wieder, müsste einfach etwas Beistand beim programmieren haben.
|