-         

Ergebnis 1 bis 5 von 5

Thema: Nokia 3310 und 3410 mit PIC18F4550, C18 Compiler

  1. #1

    Nokia 3310 und 3410 mit PIC18F4550, C18 Compiler

    Anzeige

    Hallo Leute!

    Hier ein Test-Programm , dass die Nokia-Anzeigen 3310 und 3410 mit einem
    PIC18F4550 verwendet. Die Anzeige kann wahlweise am Hardware-SPI oder an
    software-definierten Anschlüssen betrieben werden. Ich habe das Programm
    aus CSS nach C18 portiert und im Simulator getestet. Es ist eine
    Überarbeitung eines Quelltextes, der bereits ins Forum gestellt wurde.
    Es dürften aber noch kleine Schnitzer drin sein. Probiert es einfach
    aus und sagt mal, ob es bei Euch läuft. Es läuft mit kleinen
    Veränderungen auch auf allen anderen 18F Prozessoren.

    Übrigens hab ich überlegt, ob man nicht die Hardware-SPI mit einem
    Interrupt arrangieren könnte, damit der Prozessor nicht sinnlos
    herumrödeln muss, soll heißen,...

    1 void SendeDaten(unsigned char* Puffer,unsigned char Anzahl)
    2 {
    3 unsigned char iByte;
    4 unsigned char i;
    5 _SCE=0;
    6 for (iByte=0;iByte<Anzahl;++iByte)
    7 {
    8 WriteSPI(Puffer[iByte]);
    9 while (!PIR1bits.SSPIF); \/
    10 }
    11 _SCE=1;
    12 }

    ...dass das ,,while (!PIR1bits.SSPIF)" in einer ISR abgefertigt wird.

    Vielleicht hat ja jemand noch ein Kaninchen im Hut...
    Grüße,
    Christoph
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.10.2004
    Ort
    Nordschwarzwald
    Alter
    34
    Beiträge
    506
    Du kannst ja einfach ne Art Mini-Betriebssystem machen:
    - Timerinterrupt, der alle paar ms zuschlägt
    - Wenn der zuschlägt, den Prozesskontext (Akku, PC, Status-Register, ...) sichern, anderen Prozesskontext laden und PC neu setzen

    Und da drinnen läuft einmal dein normaler Prozess und einmal dein Prüf- und Sendeprozess. Damit hast du ein fast echtes Multitasking - du solltest nur darauf achten, dass du mit den einzelnen Prozessen keine Speicherbereiche von anderen Prozessen überschreibst.

    Ist vielleicht etwas aufwändiger, aber ist mir grad so eingefallen - ausserdem könnte es auch sonst gut passen, wenn man nicht alles in eine große Main-Schleife reinwurschteln muss.

    Du kannst natürlich auch die einfache Variante machen: die Prozesse hören freiwillig immer wieder mal auf und "geben den Prozessor ab".

    MfG
    Stefan

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.10.2004
    Ort
    ferd. Waldmüllerg. 7/2
    Alter
    32
    Beiträge
    456
    du solltest nur darauf achten, dass du mit den einzelnen Prozessen keine Speicherbereiche von anderen Prozessen überschreibst.
    lol... Endlich mal ein Vorteil von Page-Baniking . Das überschreiben ist einfach zu lösen, vor allem bei den 18F, wo alle SFR ohne Banking direkt ansprechbar sind. Einfach bei dem "Wechsel" des Threads die Bank umschalten. Natürlich dürfen die einzelnen Threads selber die Speicherbänk nicht wechseln . Dann muss man sich keine Sorgen mehr wegen dem Überscheiben machen.
    Nachteil ist halt, dass das nur bis X Threads funktioniert, das aber verlässlich .

    MfG
    Mobius

  4. #4
    Hallöle,
    einen Interrupt ist, wenn ich den Quelltext von AN1003 (MSD-Karte an PIC) richtig verstehe, eigentlich Quatsch. Man kann sogar den ganzen Kram im normalen Programmteil beschleunigen:

    _SCE=0; //Anzeige einschalten
    for (iByte=0;iByte<Anzahl;++iByte)
    SSPBUF=Puffer[iByte];
    _SCE=1;

    Erklärung: Die Schleife läuft 21 Befehlstakte lang, dass SPI Schieberegister braucht aber nur 16 Takte zum versenden der 8 Bits, vorausgesetzt es ist fosc/8 eingestellt ist => bei 20MHz sendet PIC mit 2,5Mbit/Sek

    Also ist ein Byte schneller raus als ein Schleifendurchlauf dauert. Deshalb geht das hier so einfach

    Sagt mir, wenn Ihr's anders seht, ich hab's noch nicht ausprobiert

    Grüße,
    Christoph

    P.S. [-X Die Angabe im Datenblatt, dass das SPI des PIC18F4550 2Mbit/Sek (S.200) macht ist ein Tippfehler. Es muss 12Mbit/Sek heißen.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.10.2004
    Ort
    Nordschwarzwald
    Alter
    34
    Beiträge
    506
    Zitat Zitat von Mobius
    du solltest nur darauf achten, dass du mit den einzelnen Prozessen keine Speicherbereiche von anderen Prozessen überschreibst.
    lol... Endlich mal ein Vorteil von Page-Baniking . Das überschreiben ist einfach zu lösen, vor allem bei den 18F, wo alle SFR ohne Banking direkt ansprechbar sind. Einfach bei dem "Wechsel" des Threads die Bank umschalten. Natürlich dürfen die einzelnen Threads selber die Speicherbänk nicht wechseln . Dann muss man sich keine Sorgen mehr wegen dem Überscheiben machen.
    Nachteil ist halt, dass das nur bis X Threads funktioniert, das aber verlässlich .

    MfG
    Mobius
    Die Idee mit den unterschiedlichen Bänken ist gut - muss ich demnächst glatt mal ausprobieren

    MfG
    Stefan

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •