PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pic führtprogramm nicht korrekt aus



cavorca
24.09.2006, 11:21
Hallo,

In meinem Programm steht etwa folgendes:
buffer[0]=portD
buffer[1]=portD
buffer[2]=portD
...
buffer[749]=portD


in assambler sieht das dann so aus:

$00F4 $5083 MOVF PORTD, W, 0
$00F6 $6F61 MOVWF main_global_buffer_2, 1
$00F8 $5083 MOVF PORTD, W, 0
$00FA $6F62 MOVWF main_global_buffer_3, 1


Das funktioniert soweit auch ganz gut.

wenn ich aber das nicht bis 749 programmiere sondern z.b. bis 1024 dann macht der pic nur noch irgendetwas chaotisches, was genau kann ich nicht sagen. auch wenn ich dann in ein 2. array speichere macht der pic nicht das was ich programmiert habe.

Woran kann das liegen?

MfG Cavorca

P.S. Ist das richtig: wenn der PIC mir 40 MHz läuft wird 5 mio mal/sec der wert an portD abgespeichert? Oder braucht der PIC für einen der Befehle länger?

BMS
24.09.2006, 13:36
Hi

...wäre vielleicht ganz nützlich, wenn du deinen PIC-Typ angeben würdest ^^

ansonsten:
wenn ich das richtig verstanden habe, hast du ein eindimensionales array mit 749 bzw. 1024 Einträgen.
In jeden eintrag wird "portd" hineingeschrieben , soweit richtig?
ich gehe mal davon aus, das jeder eintrag deines arrays ein byte verbraucht (wie man da wörter reinschreiben soll ist mir unklar-wenn dann nur *einen* buchstaben im ascii-code)
...Und wahrscheinlich hat dein PIC nicht genug RAM, um dein ganzes array zu speichern (das wären ja 749/1024 bytes ram! zum vergleich: mein pic 16f74 hat nur 192 Bytes RAM)

Edit: Für ein 2. array hat der pic auch keinen platz, da ja *jeder* Eintrag 1 Byte verschlingt, egal in welchem array!!

Gruss
BMS

cavorca
24.09.2006, 13:57
klar, pic ist:18F4680 (wollte ich eben eigentlich auch engeben habs aber vergessen)

und ja 749 mal bzw 1024 mal ein byte.
Der pic hat 3328 bytes ram, da liegt also nicht das problem, laut compiler ist auch noch sehr viel frei.

das kann auch aus einem anderen grund nicht das problem sein:

wenn ich es in einer schleife mache funktioniert es ohne probleme bis 3000
also 3000 mal nacheinander daten von portd in das array schreiben.
das problem an der schleife ist nur das sie wirklich extrem viel langsamer ist als wenn man alle befehle seperat nacheinander schreibt. deshalb mache ich es so und nicht mit schleife.
ich bin ratlos.
Watchdog Timer ist in der konfiguration eigentlich deaktiviert. kann der vielleicht doch irgendwie aktiviert sein? also per software?

MfG Cavorca

Edit: Das problem ist halt auch, dass der pic nicht nur falsche Daten speichert sondern total unkontrolloiert irgend einen blödsinn macht.

T.J.
16.04.2007, 20:01
Das dieser Pic macht was er will, kommt mir bekannt vor! (https://www.roboternetz.de/phpBB2/viewtopic.php?t=29650)