hi
ich habe grade in der schule mein abschluss projekt.
ich möchte eine sinus-spannung mittels µc erzeugen.
habe auch schon alles fertig(platinen und so).
jetzt hackt es an der programmierung in c.
benutze rigel reads51 zum programmieren. das programm soll auf einen
8051 laufen.
da ich erst montag meinen dac bekomme kann ich das programm im moment
nur mit reads51 prüfen.
glaube das es nicht richtig läuft. weiß auch nicht wie ich das genau
prüfen könnt.
ist mein erstes elektronik/µc projekt! habe zwar schon viel gelötet und
geäzt aber halt nur nach vorlage.
wär nett wenn mal wer mit mehr ahnung als ich :) mir ein paar tipps
geben könnt!
vielen dank schonmal
Ja dein Programm wird nicht richtig laufen.
Denn was apssiert, wenn x den Wert 71 hat, beim nächsten
Schleifendurchlauf? genau, x wird weiter inkrementiert - und liegt damit
ausserhalb des gültigen Bereichs für dein Sinus-Array.
Der Code muss wenn schon lauten:
while(1)
{
printf("\nhere we go...\n");
if(x<72)
x++;
else
x=0;
P3=Sinus[x];
}
moin moin,
{
if(x==73) wird nur einmal zu Start aufgerufen
{
x=0;
}
while(1) //in dieser Schleife bleibt der µc
{
printf("\nhere we go...\n");
x++;
P3=Sinus[x];
}
}
void SetupTimer0(void)
Das wird nie aufgerufen!
Hast also mindestens 2 Baustellen.
Mit Gruß
Pieter
hi
vielen dank schonmal für eure hilfe!
ja das setuptimer 0 hab ich rausgenommen und vergessen wieder
reinzupacken.
for schleife werwende ich nicht, da mein lehrer mir gesagt hat der
controller nicht alzu viel speicher hat und ich es klein und einfach
halten soll.
ich bin auf einem berufkolleg für technik und gestaltung und mache
meinen informationtechnischen assisten und fachinformatiker.
meld mich morgen nochmal wenn ich fit bin und nochmal drüber gegcukt
habe und eure tips angewand hab.
cu
Ok ich muss zugeben ich weiß jetzt nicht wieviel genau der
Codeunterschied zwischen einer if + while + inrement usw zu ner
forschleife ist aber eigendlich sollte er gleich sein es ist nur
wesentlich übersichtlicher. Und ich kann mir ned vorstellen das das Teil
von einer for Schleife überfordert wird.
Kompromisse muss man manchmal machen aber manches ist irgendwie unsinnig
und verschlechtert nur die Lesbarkeit des Codes.
Gruß ErgoProxy
hi
ich habe nochmal drüber geguckt und ein paar sachen geändert.
soweit ichs sehn kann müsste es jetzt laufen.
habe aber noch 2 probleme.
1. wie stell ich die interrupt zeit auf 20ms(50hz)?(11.059mhz)
2. was muss ich machen damit ich beim simtty fenster den sinus[x] wert
angezeigt bekomm? bekomme da immer nur nullen oder komsiche zeichen!
vielen dank euch schonmal
cu
Guten Tag,
überlege mal, welchen Vorteil es hätte, wenn die Länge der Tabelle ein
Vielfaches von 2 wäre.
Dann könnte es nämlich so aussehen:
unsigned int x;
while(1)
{
if(nOldTime!=nTime)
{
nOldTime=nTime;
P3=Sinus[(++x)%64];//Index geht von 0..63 oder %128 für 0..127
cprintf("%d\n",P3);
}
}
x läuft dann von 0 .. 65535, aber das stört ja niemanden, da die Bits 6
bis 15 wegmaskiert werden.
Bei unsigned int kannst Du statt %64 auch &63 schreiben.
Hast Du schon Jespers Poor Man's DDS gelesen?
www.myplace.nu/avr/minidds/index.htm