Hallo, Ich brauch leider nun Hilfe von euch, mein AVR macht "komische" sachen... Obs am AVR liegt ? Defekt? dieser ist aber noch recht neu... oder ob ich einen Denkfehler habe?! oder ob der GCC mist baut... Code Optimierungen habe ich schon ausprobiert 0,1,2,3,S.. hilft aber alles nicht wirklich. Der Quellcode ist nicht recht unordendlich, als bitte nicht hauen, ist noch Prototypen entwicklung, was mich nur wundert ist das der avr teils einfach neustartet, es aber nicht an der strom versorgung liegt, dies macht er immer an der gleichen stelle... es geht hier um ein multiplex programm das werte von einer externen fft auf dem display multiplexen soll.. das ist ein AVR Mega1284P, liegt es an den 16 Bit Variabeln? und Returns mit den 16 Bit breiten oder habe ich irgend wo einen Denkfehler? über hilfe würde ich mich sehr freuen gruß philip
Dein Code ist ja prächtig kommentiert, erwartest Du wirklich, daß sich jeder da erst reinpfitzen soll? Wenn Du Hilfe willst, solltest Du erstmal kommentieren. Und keiner kennt Deinen Schaltplan. Wo da was ausgegeben wird, erschließt sich mir nicht. Multiplexen erfordert zwingend einen Timerinterrupt, alles andere ist nur Murks. Und erzähl mir nicht, daß man erstmal mit Murks anfangen kann. Das Multiplexen darf auch nur die fertigen Daten anzeigen, alles andere kostet viel zu viel Zeit und Deine CPU erstickt unter der Last. Es ist auch Unsinn, die gleichen Daten jedesmal neu aufzubereiten. Die Aufbereitung der Daten macht dann in aller Ruhe das Main. Und nach jedem Bildaufbau wartet das Main erstmal, bis das Bild mehrere Multiplexzyklen lang angezeigt wurde, damit der Mensch es auch sehen kann. Eine Bildrate von max 10fps sollte dicke reichen. Und falls der Bildaufbau stören sollte, nimmt man einfach 2 Bildpuffer und schaltet sie um.
1 | void makeGraph(void){ |
2 | |
3 | databufferG1[0] = makeGraphLine1(fftBuffer[0]); |
4 | databufferG1[1] = makeGraphLine1(fftBuffer[1]); |
5 | databufferG1[2] = makeGraphLine1(fftBuffer[2]); |
6 | databufferG1[3] = makeGraphLine1(fftBuffer[3]); |
7 | databufferG1[4] = makeGraphLine1(fftBuffer[4]); |
8 | databufferG1[5] = makeGraphLine1(fftBuffer[5]); |
9 | databufferG1[6] = makeGraphLine1(fftBuffer[6]); |
10 | databufferG1[7] = makeGraphLine1(fftBuffer[7]); |
11 | databufferG1[8] = makeGraphLine1(fftBuffer[8]); |
12 | databufferG1[9] = makeGraphLine1(fftBuffer[9]); |
13 | databufferG1[10] = makeGraphLine1(fftBuffer[10]); |
14 | databufferG1[11] = makeGraphLine1(fftBuffer[11]); |
15 | databufferG1[12] = makeGraphLine1(fftBuffer[12]); |
16 | databufferG1[13] = makeGraphLine1(fftBuffer[13]); |
17 | databufferG1[14] = makeGraphLine1(fftBuffer[14]); |
18 | databufferG1[15] = makeGraphLine1(fftBuffer[15]); |
19 | |
20 | databufferG2[0] = makeGraphLine1(fftBuffer[16]); |
21 | databufferG2[1] = makeGraphLine1(fftBuffer[17]); |
22 | databufferG2[2] = makeGraphLine1(fftBuffer[18]); |
23 | databufferG2[3] = makeGraphLine1(fftBuffer[19]); |
24 | databufferG2[4] = makeGraphLine1(fftBuffer[20]); |
25 | databufferG2[5] = makeGraphLine1(fftBuffer[21]); |
26 | databufferG2[6] = makeGraphLine1(fftBuffer[22]); |
27 | databufferG2[7] = makeGraphLine1(fftBuffer[23]); |
28 | databufferG2[8] = makeGraphLine1(fftBuffer[24]); |
29 | databufferG2[9] = makeGraphLine1(fftBuffer[25]); |
30 | databufferG2[10] = makeGraphLine1(fftBuffer[26]); |
31 | databufferG2[11] = makeGraphLine1(fftBuffer[27]); |
32 | databufferG2[12] = makeGraphLine1(fftBuffer[28]); |
33 | databufferG2[13] = makeGraphLine1(fftBuffer[29]); |
34 | databufferG2[14] = makeGraphLine1(fftBuffer[30]); |
35 | databufferG2[15] = makeGraphLine1(fftBuffer[31]); |
36 | |
37 | databufferG3[0] = makeGraphLine1(fftBuffer[32]); |
38 | databufferG3[1] = makeGraphLine1(fftBuffer[33]); |
39 | databufferG3[2] = makeGraphLine1(fftBuffer[34]); |
40 | databufferG3[3] = makeGraphLine1(fftBuffer[35]); |
41 | databufferG3[4] = makeGraphLine1(fftBuffer[36]); |
42 | databufferG3[5] = makeGraphLine1(fftBuffer[37]); |
43 | databufferG3[6] = makeGraphLine1(fftBuffer[38]); |
44 | databufferG3[7] = makeGraphLine1(fftBuffer[39]); |
45 | databufferG3[8] = makeGraphLine1(fftBuffer[40]); |
46 | databufferG3[9] = makeGraphLine1(fftBuffer[41]); |
47 | databufferG3[10] = makeGraphLine1(fftBuffer[42]); |
48 | databufferG3[11] = makeGraphLine1(fftBuffer[43]); |
49 | databufferG3[12] = makeGraphLine1(fftBuffer[44]); |
50 | databufferG3[13] = makeGraphLine1(fftBuffer[45]); |
51 | databufferG3[14] = makeGraphLine1(fftBuffer[46]); |
52 | databufferG3[15] = makeGraphLine1(fftBuffer[47]); |
53 | |
54 | databufferG4[0] = makeGraphLine1(fftBuffer[48]); |
55 | databufferG4[1] = makeGraphLine1(fftBuffer[49]); |
56 | databufferG4[2] = makeGraphLine1(fftBuffer[50]); |
57 | databufferG4[3] = makeGraphLine1(fftBuffer[51]); |
58 | databufferG4[4] = makeGraphLine1(fftBuffer[52]); |
59 | databufferG4[5] = makeGraphLine1(fftBuffer[53]); |
60 | databufferG4[6] = makeGraphLine1(fftBuffer[54]); |
61 | databufferG4[7] = makeGraphLine1(fftBuffer[55]); |
62 | databufferG4[8] = makeGraphLine1(fftBuffer[56]); |
63 | databufferG4[9] = makeGraphLine1(fftBuffer[57]); |
64 | databufferG4[10] = makeGraphLine1(fftBuffer[58]); |
65 | databufferG4[11] = makeGraphLine1(fftBuffer[59]); |
66 | databufferG4[12] = makeGraphLine1(fftBuffer[60]); |
67 | databufferG4[13] = makeGraphLine1(fftBuffer[61]); |
68 | databufferG4[14] = makeGraphLine1(fftBuffer[62]); |
69 | databufferG4[15] = makeGraphLine1(fftBuffer[63]); |
70 | |
71 | databufferR1[0] = makeGraphLine2(fftBuffer[0]); |
72 | databufferR1[1] = makeGraphLine2(fftBuffer[1]); |
73 | databufferR1[2] = makeGraphLine2(fftBuffer[2]); |
74 | databufferR1[3] = makeGraphLine2(fftBuffer[3]); |
75 | databufferR1[4] = makeGraphLine2(fftBuffer[4]); |
76 | databufferR1[5] = makeGraphLine2(fftBuffer[5]); |
77 | databufferR1[6] = makeGraphLine2(fftBuffer[6]); |
78 | databufferR1[7] = makeGraphLine2(fftBuffer[7]); |
79 | databufferR1[8] = makeGraphLine2(fftBuffer[8]); |
80 | databufferR1[9] = makeGraphLine2(fftBuffer[9]); |
81 | databufferR1[10] = makeGraphLine2(fftBuffer[10]); |
82 | databufferR1[11] = makeGraphLine2(fftBuffer[11]); |
83 | databufferR1[12] = makeGraphLine2(fftBuffer[12]); |
84 | databufferR1[13] = makeGraphLine2(fftBuffer[13]); |
85 | databufferR1[14] = makeGraphLine2(fftBuffer[14]); |
86 | databufferR1[15] = makeGraphLine2(fftBuffer[15]); |
87 | |
88 | databufferR2[0] = makeGraphLine2(fftBuffer[16]); |
89 | databufferR2[1] = makeGraphLine2(fftBuffer[17]); |
90 | databufferR2[2] = makeGraphLine2(fftBuffer[18]); |
91 | databufferR2[3] = makeGraphLine2(fftBuffer[19]); |
92 | databufferR2[4] = makeGraphLine2(fftBuffer[20]); |
93 | databufferR2[5] = makeGraphLine2(fftBuffer[21]); |
94 | databufferR2[6] = makeGraphLine2(fftBuffer[22]); |
95 | databufferR2[7] = makeGraphLine2(fftBuffer[23]); |
96 | databufferR2[8] = makeGraphLine2(fftBuffer[24]); |
97 | databufferR2[9] = makeGraphLine2(fftBuffer[25]); |
98 | databufferR2[10] = makeGraphLine2(fftBuffer[26]); |
99 | databufferR2[11] = makeGraphLine2(fftBuffer[27]); |
100 | databufferR2[12] = makeGraphLine2(fftBuffer[28]); |
101 | databufferR2[13] = makeGraphLine2(fftBuffer[29]); |
102 | databufferR2[14] = makeGraphLine2(fftBuffer[30]); |
103 | databufferR2[15] = makeGraphLine2(fftBuffer[31]); |
104 | |
105 | databufferR3[0] = makeGraphLine2(fftBuffer[32]); |
106 | databufferR3[1] = makeGraphLine2(fftBuffer[33]); |
107 | databufferR3[2] = makeGraphLine2(fftBuffer[34]); |
108 | databufferR3[3] = makeGraphLine2(fftBuffer[35]); |
109 | databufferR3[4] = makeGraphLine2(fftBuffer[36]); |
110 | databufferR3[5] = makeGraphLine2(fftBuffer[37]); |
111 | databufferR3[6] = makeGraphLine2(fftBuffer[38]); |
112 | databufferR3[7] = makeGraphLine2(fftBuffer[39]); |
113 | databufferR3[8] = makeGraphLine2(fftBuffer[40]); |
114 | databufferR3[9] = makeGraphLine2(fftBuffer[41]); |
115 | databufferR3[10] = makeGraphLine2(fftBuffer[42]); |
116 | databufferR3[11] = makeGraphLine2(fftBuffer[43]); |
117 | databufferR3[12] = makeGraphLine2(fftBuffer[44]); |
118 | databufferR3[13] = makeGraphLine2(fftBuffer[45]); |
119 | databufferR3[14] = makeGraphLine2(fftBuffer[46]); |
120 | databufferR3[15] = makeGraphLine2(fftBuffer[47]); |
121 | |
122 | databufferR4[0] = makeGraphLine2(fftBuffer[48]); |
123 | databufferR4[1] = makeGraphLine2(fftBuffer[49]); |
124 | databufferR4[2] = makeGraphLine2(fftBuffer[50]); |
125 | databufferR4[3] = makeGraphLine2(fftBuffer[51]); |
126 | databufferR4[4] = makeGraphLine2(fftBuffer[52]); |
127 | databufferR4[5] = makeGraphLine2(fftBuffer[53]); |
128 | databufferR4[6] = makeGraphLine2(fftBuffer[54]); |
129 | databufferR4[7] = makeGraphLine2(fftBuffer[55]); |
130 | databufferR4[8] = makeGraphLine2(fftBuffer[56]); |
131 | databufferR4[9] = makeGraphLine2(fftBuffer[57]); |
132 | databufferR4[10] = makeGraphLine2(fftBuffer[58]); |
133 | databufferR4[11] = makeGraphLine2(fftBuffer[59]); |
134 | databufferR4[12] = makeGraphLine2(fftBuffer[60]); |
135 | databufferR4[13] = makeGraphLine2(fftBuffer[61]); |
136 | databufferR4[14] = makeGraphLine2(fftBuffer[62]); |
137 | databufferR4[15] = makeGraphLine2(fftBuffer[63]); |
138 | }
|
Schon mal was von Schleifen gehört?
1 | void makeGraph(void) |
2 | {
|
3 | for (unsigned char nInd = 0; nInd < 16; nInd++) |
4 | {
|
5 | databufferG1[nInd] = makeGraphLine1(fftBuffer[nInd]); |
6 | databufferG2[nInd] = makeGraphLine1(fftBuffer[nInd + 16]); |
7 | databufferG3[nInd] = makeGraphLine1(fftBuffer[nInd + 32]); |
8 | databufferG4[nInd] = makeGraphLine1(fftBuffer[nInd + 48]); |
9 | |
10 | databufferR1[nInd] = makeGraphLine2(fftBuffer[nInd]); |
11 | databufferR2[nInd] = makeGraphLine2(fftBuffer[nInd + 16]); |
12 | databufferR3[nInd] = makeGraphLine2(fftBuffer[nInd + 32]); |
13 | databufferR4[nInd] = makeGraphLine2(fftBuffer[nInd + 48]); |
14 | }
|
15 | }
|
mfg.
Phil Schlock schrieb im Beitrag > dies macht er immer an der gleichen stelle... > > es geht hier um ein multiplex programm das werte von einer externen fft > auf dem display multiplexen soll.. > > das ist ein AVR Mega1284P, liegt es an den 16 Bit Variabeln? > und Returns mit den 16 Bit breiten oder habe ich irgend wo einen > Denkfehler? > > über hilfe würde ich mich sehr freuen KanDu.meintest ja er haengt sich immer an der selben stelle weg...kannst du das ding debuggen? Wenn.ja wo haengt er sich weg..... Ich h
@Thomas Eckmann ja ich kenne schleifen... hatte aber probeweise diese rausgenommen... ich bin immoment etwas am verzweifeln, habe sonst immer einen mega32 genommen dies ging ohne probleme..., damit meine ich der avr springt nicht einfach auf den reset zurück... das ist ja was mich so wundert, teils läuft es, teils haut er sich zamm... strom versorgung ist aber ok, ich habe auch noch ein paar mehr abblock kondensatoren (1nF, 100nF, 1pF) dazu gelötet... angesteuert werden 4 alte Samsung 16x16 LED Pannels mit Schieberegister IC.. habe nun einen debugger da.. werde ihn nun auch mal ausprobieren, löte mir gerade einen adapter.. und werde dann ein pannel raus nehmen.. da dies leider an den debugger pins sitzt.. sorry für den unkommentierten code... ich änder immoment zu oft etwas das ich da noch nicht so viel kommentieren konnte, immoment wär ich froh wenn das multiplexen und die manipulation der "framaes" klappt ohne das der avr sachen macht, die sich für mich nicht logisch aus dem code ergeben... multiplexen via interrupt finde ich auch besser... aber hatte damit probleme... denke meine timer routine dauerte zu lange, die zu multiplexenden daten werden alle in einer anderen methode aufbereitet... aber der avr hängt wohl zu lange in der interrupt routine.. komischerweise geht er wenn diese durchgelaufen ist auch nicht mehr richtig in das haupt programm zurück, er hat sich hier auch total komsich verhalten... werde nun mit dem debugger mal schauen was da los ist, falls jemand noch tipps für mich hat würde ich mich sehr freuen gruß phil
Hi Ich hab von C keine Ahnung und wenn das Programm auch noch schlecht dokumentiert ist, macht es auch keinen Sinn, sich da reinzudenken. An diesem Punkt geb ich Peter völlig recht: ein schlampig angefangenes Programm bleit schlampig. Wenn es nicht läuft, verbrät man viel Zeit mit der Suche nach Flüchtigkeitsfehlern und wenn es läuft, warum dann aufräumen. Ich hab genug Programme gesehen ( und teilweise auch überarbeiten müssen) wo diese Aussage zutrifft. Aber nun zu deinem Problem: Wenn deine Software auf einem anderen Controller läuft und nur bei diesem Typ dieser Fehler auftritt, dann denk ich sofort an die controllerspezifische Datei. Auch die Frage: ist die IVT richtig deklariert oder taucht ein freigegebener Interrupt auf und aufgrund fehlender Vektoradresse landet er in der Startroutine. Was ja einem Neustart gleichkommt. Ich seh zwar eine freigabe der globalen Interrupts und auch eine Initialisierung vom Timer, aber die entsprechende ISR hab ich nicht gesehen. Kann aber an meinen mangelhaften C- Kenntnissen liegen. Gruß oldmax
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.