mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Sinuserzeugung im c


Autor: Daniel Petkovic (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Daniel Petkovic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Petkovic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke fürs verschieben

mfg daniel

Autor: Daniel Petkovic (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Petkovic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Petkovic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Petkovic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Petkovic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Daniel Petkovic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Petkovic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Absoluter Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel Petkovic (Gast)
Datum:

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

mfg daniel

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.