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
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 ;-)
ich schreib das programm in Assembler nur ist es schwierig alles selbst durchzuzählen bei mehrern schleifen, bedingungen, sprünge....
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. ;-)
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?
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?
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
> 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.
das verschicken von 512 kanäle aus dem Speicher funktioniert schon in assembler
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.