www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC18F2550 unerklärlicher Sprung


Autor: Markus L_______ (ichkg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich bin gerade dabei eine Software für meinen PIC18F2550 zu schreiben, 
mit der er DMX Signale aussenden kann hat bisher auch alles gut 
funktioniert weil ich das Protokoll am Anfang selbst mit schleifen usw 
nachgebildet habe.
Nun versuche ich das Ganze zu automatisieren dafür hab ich eine Routine 
geschriben bei der mir der PIC die 8bits Seriel verschickt

Gibt es irgendein Tool Programm um zu zählen wie viele Takte bestimmte 
Codeabschnitte brauchen?
Da bei DMX ein Bit 4µs hat und dabei nur +-0,08µs Toleranz verträgt wird 
es bei einem Komplexeren Code schwierig, da ich eine Cycluszeit von 
0,2µs habe(20MHz)
Ich verwende MPLAB und ICD2 als Debugger

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die antwort auf deine frage: lass dir in MPLAB den assembler code 
anzeigen, zähle die befehle durch und multipliziere die anzahl mit der 
zeit/befehl, somit kriegst du deine zeit

alternative 1: setze einen timer = 0, der gleich schnell hoch zählt wie 
der interne clock, setzte vor und nach deinem zu testenden code 
breakpoints und sehe dir die differenz des timers an

alternative 2: benutze den EUSART und du hast all die probleme nicht ;-)

Autor: Markus L_______ (ichkg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich schreib das programm in Assembler nur ist es schwierig alles selbst 
durchzuzählen bei mehrern schleifen, bedingungen, sprünge....

Autor: Michael L. (michaelx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann mich den gemachten Vorschlägen nur anschließen, Alternative 1 
kannst du doch ganz gut im Simulator machen. Aber wenn dein 
zeitkritischer Code so komplex ist, dass du anscheinend nicht mehr 
überblickst, wie alles abläuft, dann solltest du evtl. noch mal von vorn 
anfangen, könnte schneller gehen. ;-)

Autor: Markus L_______ (ichkg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab es jetzt glaub ich soweit hinbekommen nur eine frage hab ich 
noch:
hier mal ein stück vom Code
byte8bitssenden
    rrcf  Temp        ;shiftrechts
    btfss  STATUS,C   ;überprüfe Carry
    goto  lowbit2  
    goto  highbit2

highbit2
    bsf    out        ;highbit
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    goto  schleife1      ;schleife nochmal
lowbit2
    bcf    out        ;lowbit
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    goto  schleife1     ;schleife nochmal
kommisch hierbei ist das wenn ich btfss durch btfsc ersetze, und die 
beiden goto... danach umdrehe der Code nichtmehr richtig funktioniert 
Egal welcher Wert in Temp steht
eigentlich sollte ja genau das gleiche sein oder?

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
grundsätzliche frage: wieso willst du softwaremässig etwas nachbilden, 
das du schon intern als hardware fertig zum gebrauch hast?!?
neugierige frage: du gebrauchst einen USB-PIC, absichtlich?

Autor: Markus L_______ (ichkg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Master Snowman schrieb:
> grundsätzliche frage: wieso willst du softwaremässig etwas nachbilden,
> das du schon intern als hardware fertig zum gebrauch hast?!?
> neugierige frage: du gebrauchst einen USB-PIC, absichtlich?

da ich picanfänger bin wollt ich mich ein bisschen forden um da auch was 
von zu lernen
USB is klar wirdn USB-DMX Interface

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> USB is klar wirdn USB-DMX Interface
und das als anfänger wohl auch alleine und in assembler? haha, du bist 
echt ein spassvogel. schreib mir auf alle fälle eine karte, wenn du 
fertig bist.

Autor: Markus L_______ (ichkg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das verschicken von 512 kanäle aus dem Speicher funktioniert schon in 
assembler

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Zeit messen mit MPLAB:
Im MPLAB:
Menu->Debugger->Select Tool->MPLAB SIM
Menu->Debugger->StopWatch
Menu->Debugger->Settings->OSC/Trace->ProcessorFrequency

Mit dem ICD3 könntest du während des Debuggen direct die Zeit messen.

Noch eine Bemerkung am Rande. Ich habe mir einmal ein DMX Konverter 
bebaut, um das DMX Signal nachzubilden habe ich die UART benutzt:
Übertragungsformat: 8N2
Übertragungsrate 250000bit/s

Gruss Manuel

Autor: buddhafragt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mal eine Frage.... ich verwende ICD2 mit einem PIC18F2550 zum debuggen 
und mit dem wird die die Stopwatch NICHT unterstützt. Mit dem ICD3 und 
PIC18F2550 wird Stopwatch unterstützt??

Gruss
Michael

Autor: Gernot Schreiner (Firma: Ing. Gernot Schreiner) (leuchtspirale)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

    rrcf  Temp        ;shiftrechts
    btfss  STATUS,C   ;überprüfe Carry
    goto  lowbit2
    goto  highbit2

    rrcf  Temp        ;shiftrechts
    btfsc  STATUS,C   ;überprüfe Carry
    goto  highbit2
    goto  lowbit2

Ist von der Laufzeit her nicht identisch.
In der oberen Variante vergehen 4 Takte bis lowbit2 erreicht ist und 5 
Takte bis highbit2 erreicht ist. In der unteren Variante ist's genau 
umgekehrt.
Das Skipen dauert einfach einen Takt. Du solltest daher eventuell auch 
an der richtigen Stelle noch ein NOP einbauen, damit's wirklich 
symetrisch wird.

Du kannst übrigens 2 NOP's durch ein BRA $+2 ersetzen, das verbrät auch 
2 Takte, braucht aber weniger Platz.

caio, Gernot

Autor: Scotty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo leute,
ich weiß das sollte man nicht fragen aber könnte mir jemand den 
kompletten Quellcode per E-Mail zukommen lassen? Bin momentan noch in 
der Schule und ich muss für die Schule das Programm schreiben. Bekomm es 
aber nicht hin, ist zuviel für mich da wir das nie gelernt haben aber 
trotzdem verlang wird. Bitte um Hilfe!
Danke!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.