PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PIC16F84 einfaches Lauflicht



Shunth
03.12.2009, 15:37
Hallo,
hier mal ein Listing eines Lauflichtes:
// Lauflicht, Taktfrequenz 4MHz

#include <C:\cc5X\16F84.h> // Prozessor-Typ definieren
#pragma config |= 0b.1111.1111.0010 // Konfigurations-Wort

void pause(uns16 ms) // Unterprogramm zum Abwarten einer
{ // angegebenen Anzahl von Millisekunden
while(ms) // Schleife verlassen, wenn ms=0 ist
{
OPTION = 2; // Vorteiler auf 8 einstellen
TMR0 = 131; // 125 * 8 = 1000 (= 1 ms)
while (TMR0); // Abwarten einer Millisekunde
ms--; // "ms" mit jeder Millisekunde erniedrigen
}
}

void main(void) // Hier beginnt das Hauptprogramm
{
char i;
TRISB = 0b.0000.0000; // PortB als Ausgang definieren
PORTB = 0;
Sprungmarke:
PORTB.0 = 1 ; // Bit 0 von PortB setzen
pause(500); // LED 0 halbe Sekunde leuchten lassen
for (i=0 ;i<7 ;i++) // folgende Befehle 8-mal wiederholen
{
PORTB = PORTB << 1 ; // 1 kommt ins nächste Bit links
pause(500); // jede LED halbe Sekunde leuchten lassen
}
PORTB = 0; // Alle LEDs löschen
PORTB.7 = 1 ;
pause(500);
for (i=0 ;i<7 ;i++)
{
PORTB = PORTB >>1 ;
pause(500);
}
PORTB = 0;
pause(500);
goto Sprungmarke;
}
Ich möchte jetzt mit jeden einmaligen Durchlauf die Zeit verkürzen. Jetzt könnte man die pause(xxx) immer kleiner machen. Das muß doch auch intelligenter gehen. Weiterhin würde ich festlegen wollen wie lange der Rechts/Linkslauf des Lichtes gehen soll bis sich die Zeit verkürzt. Hat wer ne Idee???

Gruß Shunth

Shunth
03.12.2009, 16:18
.....schuldigung das mit dem Listing....

Siro
03.12.2009, 16:36
Hallo Shunt, schau Dir mal bitte folgendes an:
ich konnte es zwar nicht probieren, aber ich denke so in etwas dürfte es gehen.

viel Spass noch
Siro

Shunth
03.12.2009, 19:06
Hallo,
ich danke dir für deine Idee aber beim assemblieren macht der vorab viele Fehler. Ich schau mir das aber mal an. Ist das für den PIC16f84 gedacht?

Danke!

Siro
03.12.2009, 20:48
Hallo,
ich hoffe doch nicht, Du hast versucht die .TXT Datei zu "Compilieren" das geht natürlich nicht. Das war nur ein ungefäre Anleitung, aber kein kompletter Code. Ich habe mal versucht, anhand deines Codes eine Compilierbare .C Datei zu erstellen. Das sollte eigentlich nun funktionieren.

Siro

Shunth
03.12.2009, 21:13
....ne, das war mir klar das der mit .txt nix anfangen kann...
Danke der Mühe aber es kommt:

uns16 AufAb = 100; // bei jedem Durchlauf soll die Zeit um 100 milli Sekunden veraendert werden
^------
Error Versuch1.c 9: Initialized static and global RAM variables are not supported

vielleicht der Compiler nicht der Richtige??????

Siro
03.12.2009, 21:45
Achso, dann kann das der Compiler nicht.
Ich habs nochmal geändert.
Siro

Shunth
03.12.2009, 22:22
Na Respekt Siro!!!! Ja, das funktioniert super!!! Die Anlaufzeit könnte etwas schneller gehen ( soll ein elektronisches Pendel simulieren mit LED und daher wäre die Zeit bis zum "Voll" schwingen kürzer, dann lange kurz schwingen und Auspendeln) Aber, ich sage dir echt vielen Dank!!!!
Ist mein Compiler veraltet????



Super Dank!!!!!!!!!!