Forum: Mikrocontroller und Digitale Elektronik PIC18F2550 unerklärlicher Sprung


von Markus L. (ichkg)


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

von Master S. (snowman)


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 ;-)

von Markus L. (ichkg)


Lesenswert?

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

von Michael L. (michaelx)


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. ;-)

von Markus L. (ichkg)


Lesenswert?

ich hab es jetzt glaub ich soweit hinbekommen nur eine frage hab ich 
noch:
hier mal ein stück vom Code
1
byte8bitssenden
2
    rrcf  Temp        ;shiftrechts
3
    btfss  STATUS,C   ;überprüfe Carry
4
    goto  lowbit2  
5
    goto  highbit2
6
7
highbit2
8
    bsf    out        ;highbit
9
    nop
10
    nop
11
    nop
12
    nop
13
    nop
14
    nop
15
    nop
16
    nop
17
    nop
18
    goto  schleife1      ;schleife nochmal
19
lowbit2
20
    bcf    out        ;lowbit
21
    nop
22
    nop
23
    nop
24
    nop
25
    nop
26
    nop
27
    nop
28
    nop
29
    nop
30
    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?

von Master S. (snowman)


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?

von Markus L. (ichkg)


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

von Master S. (snowman)


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.

von Markus L. (ichkg)


Lesenswert?

das verschicken von 512 kanäle aus dem Speicher funktioniert schon in 
assembler

von Manuel (Gast)


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

von buddhafragt (Gast)


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

von Gernot S. (Firma: Ing. Gernot Schreiner) (leuchtspirale)


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

von Scotty (Gast)


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!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.