Forum: Mikrocontroller und Digitale Elektronik Sinuserzeugung im c


von Daniel Petkovic (Gast)


Angehängte Dateien:

Lesenswert?

Hallo! Ich bin erst kurzem auf Mikrocontroller aufgestiegen. Und habe da
ein  Problem.

Ich erzeuge einen Sinus in dem ich eine Wertetabelle von einem Sinus
ausgebe. Mein Mikrocontroller ist ein ATMega8 und Programm schreibe ich
mit codevision in c. Das Programm ist interruptgesteuert, d.h. ich
erzeuge den sinus mit höchster priorität und ausgabe und messen wird
mit dem interrupt ermöglicht.

Erzeugung funktioniert, allerdings möchte ich, mit if-schleifen etwas
programmieren. es scheint allerdings, das das if ignoriert wird und
gleich das ausgeführt was in den geschweiften klammern steht.

in dem programm habe ich einfach den wert bei dem momentan der
interrupt ausgelöst wird, am lcd ausgegeben. zu testzwecken. das
funktioniert auch. nur die if-bedingung passt nicht

Schauts euch am besten das programm selber an.

Wäre super wenn ihr mir helft, danke

mfg daniel

von OldBug (Gast)


Lesenswert?

Hallo Daniel!

Erst mal: falsches Forum! Das gehört eher in "Allgemein".
Naja, vielleicht sieht Andreas das und verschiebts freundlicherweise
;)

Zu Deinem Problem:
Du machst eine Zuweisung und prüfst dann, diese Zuweisung "wahr"
ist.

if (null=PINC.0)
{ lcd_gotoxy(0,1);
  lcd_putsf("Nulldurchgang");
  }

Das ist ein wenig falsch, was Du möchtest, sieht in etwa so aus:

if (null == PINC.0)
{
  lcd_gotoxy(0, 1);
  lcd_putsf("Nulldurchgang");
}

Was ich immer wieder feststelle: der Code, den CodeVision ausspuckt,
kann doch kein Mensch mehr lesen...

Gruß,
Patrick...

von Daniel Petkovic (Gast)


Lesenswert?

Danke, für die schnelle Antwort,

Ja genau hast recht, ich wollte eine wahrbedingung haben
mit == klappt es jetzt wunderbar, danek nochmals

hast recht vielleicht ist ja andreas so nett und verschiebt die
EInträge ins Allgemein-Forum

weißt du vielleicht, wo ich ein codevision tutorial für c finde? Unter
der Vorraussetzung es gibt natürlivh sowas.
Bzw wo finde ich ein normales c-tutorial, das bestens für die erlernung
von c für mikrocontroller geeignet ist.

mfg daniel

von Daniel Petkovic (Gast)


Lesenswert?

Danke fürs verschieben

mfg daniel

von Daniel Petkovic (Gast)


Angehängte Dateien:

Lesenswert?

Hallo! Habe wieder ein Problem bei meinem Projekt.
Alles funktioniert wunderbar. Nur ich habe jetzt folgendes Problem.

Ich möchte am PINC.3 Eingang per Taste auf einen andere Frequenz
springen (dient eh nur zum Ausprobieren). Auf jeden Fall gebe ich was
am Eingang PINC.3 ist zusätzlich auf dem Display aus. Und ich sehe das
der Eingang von alleine zwischen 0 und 1 springt ohne das ich die Taste
drücke bzw. vorher gedrückt habe.

Ich habe die Vermutung das, das irgenwiemit dem aktiviertem ADC zu tun
hat. Der ist nämlich auf PORTC und ich brauche die ersten beiden
niedriegsten Bit (ADC0 und ADC1) um etwas einzulesen. Ich nehme mal an,
dass er alle möglichen ADC-Eingänge aktiviert. Wie kann ich auf PIC.3
denn den ADC ausschalten.

Oder irre ich mich und es liegt an etwas anderes.

PS: Wie kann ich denn eine 16Bit-Zahl in 2 8Bit-Zahlen speichern, also
High und Low?

mfg, Daniel

von Daniel Petkovic (Gast)


Lesenswert?

Ach so, im vorigen Beitrag habe ich die Datei als Anhang dazugeschickt.

Habs vergessen zu erwähnen.

Wäre toll wenn mir wieder jemand hilft.

mfg daniel

von Daniel Petkovic (Gast)


Lesenswert?

Ich bin mittlerweile fraufgekommen, wo der Fehler ist, aber nicht
wieso.
Es hat nichts mit dem ADC zu tun.

Zur Sinuserzeugung brauche ich 8Bit Ausgänge.

Da aber auf meinem Board der einzige PORTD mit 8Bit ist, der frei ist.
Und ich den für das LCD brauche. Hat mir jemand diese Zeilen
geschrieben, die die 2 höchstwertigen Bits auf PORTC.5 und PORTC.4
ausgibt.
Die Zeilen schaun so aus:

PORTB=(temp&0x3F);
PORTC=((temp&0xC0)/0x04);

Allerdings wie gesagt, habe ich das nicht selbst geschrieben und ich
vertehe dies 2 Zeilen nicht, in der derFehler liegt.

Ergeben für mich irgendwie keine Logik.

Schauts euch die 2 Zeilen an und sagt mir bitte wie die funktionieren
und was falsch ist.

mfg daniel

von Daniel Petkovic (Gast)


Lesenswert?

Ich verstehe nun wie die Zeilen funktionieren, aber weiß nicht wie ich
es besser machen kann. Kann mir jemand helfen. Ich meine, ich fühle
mich hier schon ganz schön allein gelassen mitmeinem Problem.

Bitte.

mfg daniel

von Daniel Petkovic (Gast)


Lesenswert?

Alle Probleme habe ich mittlerweile behoben.
Habe halt mal mein Hirn einschalten müssen.

Für alle die sich ein paar Gedanken gemacht haben, möchte ich trotzdem
danken.

mfg daniel

von OldBug (Gast)


Lesenswert?

Hoppala!

Sorry, ich habe den Thread aus den Augen verloren, sonst hätte ich Dir
natürlich geantwortet!
Diese zwei Zeilen, die Du nicht verstehst, Maskieren die Bits, die auf
dem "anderen" Port ausgegeben werden sollen. Aber das weist Du ja
inzwischen :)
Irgendwie war das doch dann gut, daß Dir keiner mehr geantwortet hat,
jetzt vestehst Du es auf jeden fall ;)

Gruß,
Patrick...

von Daniel Petkovic (Gast)


Lesenswert?

Danke, jetzt habe ich es auch verstanden.

Hast recht ist gut, das mir keiner geantwortet hat. So verstehe ich
jetzt es ohne Probleme.

mfg daniel

von Daniel Petkovic (Gast)


Lesenswert?

Hi! Ich hab wieder ein paar Fragen.

Wie kann ich den relativ einfach im Codevision mit Kommawerten rechnen
bzw. wie kann ich diese als Kommawerte am Display ausgeben.

mfg daniel

von Absoluter Anfänger (Gast)


Lesenswert?

Hallo Daniel!

@Erzeugung funktioniert, allerdings möchte ich, mit if-schleifen etwas
programmieren.

Entschuldigung, ich möchte zwar nicht pingelig wirken, aber es gibt
keine If-Schleifen. Bei uns in der Schule wurde jeder ermahnt, der
If-Schleife sagte.

Tschüss.

von Daniel Petkovic (Gast)


Lesenswert?

Ja, hast vielleicht recht. Hab C nie so richtig gelernt. Gfällt dir
If-Bedingung besser?

mfg daniel

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
Noch kein Account? Hier anmelden.