www.mikrocontroller.net

Forum: Compiler & IDEs PWM per UART verändern in C


Autor: Thorsten Karrenbrock (thorstenk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Juuten Tach, erstmal.

Bin neu im Gebiet der µC und arbeite gerade an meinem Praktikumsthema 
und genau da hackt es derzeit.
Ich soll mit einem Atmega8 folgendes realisieren:
PWM (hab ich), die per UART verändert wird in der Pulsbreite (klappt 
nicht)
Timer mit 50 µs (hab ich)
UART, welches gesendet Zeichen zurück schickt (hab ich).

Nur eben die Verarbeitung der Zeichen aus der UART in das entsprechenden 
PWM will nicht so ganz.

Hat da jemand eine Idee?
Fertige Code´s sind zwar schön, helfen mir nicht, will es ja auch 
lernen.

Autor: Werner A. (homebrew)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann solltest du mal zeigen, was du schon hast...

Autor: Thorsten Karrenbrock (thorstenk)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anbei die c-File. WinAVR gibt ein paar Warnmeldungen wegen den 
Funktionsbezeichnungen raus, dass sehe ich aber nich als großes Problem 
an.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thorsten Karrenbrock wrote:
> Anbei die c-File. WinAVR gibt ein paar Warnmeldungen wegen den
> Funktionsbezeichnungen raus, dass sehe ich aber nich als großes Problem
> an.

Als Anfänger sollte man jede Warnung wie eine Fehlermeldung behandeln. 
Beispiel aus deinem Code:

main.c:39: warning: passing argument 1 of 'eeprom_read_byte' from 
incompatible pointer type
volatile int16_t eeFooWord EEMEM = 0x64;
...
  test_byte = eeprom_read_byte(&eeFooWord);

Na, fällt dir da was auf?

Autor: Thorsten Karrenbrock (thorstenk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das da eindeutiger der Pointertyp nicht stimmt ist mir klar und wie ich 
es korrigieren werde wäre mein nächster schritt, manchmal bringt es 
nicht, wenn man 2 Stunden sich um einen Fehler kümmert, da sollte man 
lieber abschalten und was anderes machen und genau so gehe ich da ran, 
entweder ich versuche knapp 2 Stunden dass mit dem UART hinzubekommen 
oder machen mich an den Bearbeitung der Wanungen.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du für diese Warnung 2 Stunden brauchst, ist das nur ein Grund 
mehr, sich damit zu beschäftigen, denn dadurch bekommt man 
Wissen/Erfahrung.
Und noch was: was ist, wenn du es mit dem UART genau deshalb nicht 
hinbekommst, weil die Warnungen auf ein Problem deuten, was das 
verhindert? Man sollte den vorhandenen Code erstmal fehlerfrei bekommen, 
bevor man neuen Code hinzu schreibt.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Nur eben die Verarbeitung der Zeichen aus der UART in das entsprechenden
> PWM will nicht so ganz.

Ich kann gar keine "Verarbeitung" sehen, du schickst es einfach nur 
zurück.

Autor: Thorsten Karrenbrock (thorstenk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist ja mein Problem wo ich hänge, an der Verarbeitung der gesendeten 
Zeichen.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, bei "klappt nicht" und "will nicht so ganz" dachte ich halt, es 
sei schon was da, was aber nicht funktioniert. Eigentlich meintest du 
also "fehlt noch".

Wie kommt denn der neue Wert per UART, als binärer Wert, oder als Text?

Autor: Thorsten Karrenbrock (thorstenk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Per Text, wollte denn dann eigendlich per atoi umwandeln, vergleichen 
und je nach ergebnis des Vergleichs eine Anweisung ausführen lassen.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, und woran hapert es genau?

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Per Text, wollte denn dann eigendlich per atoi umwandeln, vergleichen
>und je nach ergebnis des Vergleichs eine Anweisung ausführen lassen.
Siehste dann machs doch einfach. Wenn du die Daten zurückschicken 
kannst, dann kannst du sie doch auch an atoi übergeben, oder etwa nicht?

Autor: Thorsten Karrenbrock (thorstenk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleines Erfolgserlebnis:

habe mich in die get_string() geklemmt und lasse mir dann den
über atoi den uart_rx_buffer in eine int umwandeln.
Sobald der int-Wert kleinergleich ICR1 ist, ändert er die Pulsbreite.
void get_string(char *daten)
{
 int x;
 if (uart_rx_flag ==1)
 {
   strcpy(daten, uart_rx_buffer);
   x = atoi (uart_rx_buffer);
   if(x<=ICR1)
   {
     uart_eeprom = x;
   } 
   uart_rx_flag = 0;
 }
}

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.