PIC18F2550 unerklärlicher Sprung

OP #1531748
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
#1531755
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 ;-)
#1531791
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. ;-)
OP #1531814
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?
OP #1532006
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
Gast #1533753
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
(Firma: Ing. Gernot Schreiner) #1537353
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
Gast #1646782
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren