Homepage

  • Projekte
  • Shop
  • Forum
Erweiterte Suche
  • Schnellzugriff
    • Unbeantwortete Themen
    • Aktive Themen
    • Suche
  • FAQ
  • Anmelden
  • Registrieren
  • Foren-Übersicht
  • Suche

ATMEGA644P beide USART nutzen...?

Ethernet Mega32 Experimentierboard
Antworten
  • Druckansicht
Erweiterte Suche
13 Beiträge • Seite 1 von 1
Sash
Beiträge: 10
Registriert: 25.02.2009, 15:17:38

ATMEGA644P beide USART nutzen...?

  • Zitieren
    • Zitieren

Beitrag von Sash » 25.03.2009, 12:59:42

Hallo,

ich hab mal ne Frage bezüglich der zwei USART an einem ATMEGA644P.

Hab den ETH_M32_EX schon ne Weile mit Webcam am laufen.
Nun habe ich eine weitere Schaltung aufgebaut, ebenfalls mit einem ATMEGA644P.

Kann ich diese beiden mittels USART verbinden, oder bekomm ich an dem Webserver Probleme wegen der Kamera?
Sinn der Sache: Die andere Schaltund ist eine MicroSPS mit einem 644P, welche mein Aquarium steuert (Temperatur, Heizer, Filter. Licht, Mondlicht, pH-, Redox- & Leitwert)
Und von eben dieser Steuerung würde ich gerne ein paar Daten wie z.B. Temp. Wasserwerte und Status der Relais an den Webserver schicken um diese über das Internet betrachten (nicht ändern) zu können.
Geht das mit dem USART?
Oder hat einer eine für diesen Fall eher geeignete Idee?

Gruß
Sash
Nach oben

Benutzeravatar
Ulrich
Site Admin
Beiträge: 3054
Registriert: 29.02.2004, 18:12:19
Wohnort: Siegen
Kontaktdaten:
Kontaktdaten von Ulrich
Website

Re: ATMEGA644P beide USART nutzen...?

  • Zitieren
    • Zitieren

Beitrag von Ulrich » 25.03.2009, 20:26:39

Hallo,

das sollte gehen nur bei der Bildübertragung sollte kurz die zweite Schnittstelle abgeschaltet werden.

Gruß
Uli
Nach oben

Sash
Beiträge: 10
Registriert: 25.02.2009, 15:17:38

Re: ATMEGA644P beide USART nutzen...?

  • Zitieren
    • Zitieren

Beitrag von Sash » 26.03.2009, 13:53:31

Hallo,

ich hab jetzt mal die Cam abgesteckt und in der config.h deaktiviert.
Somit kann ich jetzt zu experimentellen Zwecken mit dem USART0 abreiten.

Jetzt hab ich folgendes Problem.
Über die Aquarium Steuerung wird der Mittelwert wie folgt auf den UART geschickt:
dtostrf(Temperatur_Mittelwert, 16, 3, temp_string); //Zerlegung von temp_insg in String
uart_puts( temp_string ); //String senden
Das funktioniert auch bestens und kann mittels Hyperterminal auch ausgelesen werden.

Wie kann ich denn nun diesen Sting im Webserver aufarbeiten und über die webpage.h ausgeben?
Wenn ich das richtig verstanden haben wird ja über die Funktion "ISR (USART_RX)" ein Interrupt ausgelöst, wenn ein Zeichen am RxD ansteht.
Dann werden ja im Folgenden die Zeichen in den "usart_rx_buffer" gespeichert. Oder lieg ich da falsch?
Hab dann einfach mal folgendes Versucht:
buffercounter=0;
for(buffercounter=0; buffercounter < 9; buffercounter++)
{
var_array[buffercounter] = usart_rx_buffer[buffercounter];
}
Wollte damit einfach mal statt der ADC Werte die Werte des buffers anzeigen.
Doch egal was da am uart ankommt, es steht bei AD-Kanal0 = 32 und der Rest ist Null.

Dass hier was net passt weiß ich sleber, sonst würde es ja gehen :lol:
Wie aber kann ich das denn genau machen?
Muss keine komplette Lösung sein. Aber ein ansatz für "klein doofi" wär net schlecht.

Gruß
Sash
Nach oben

klemic
Beiträge: 82
Registriert: 18.12.2007, 10:15:12

Re: ATMEGA644P beide USART nutzen...?

  • Zitieren
    • Zitieren

Beitrag von klemic » 26.03.2009, 14:21:28

Hallo Sash,

also ist das erste Zeichen im usart_rx_buffer eine ' ' (Leerzeichen) passt das mit dem zusammen, was Du von der SPS erwartest?
Du musst natürlich auch sicherstellen, dass alle Zeichen von Deiner SPS auch im usart_rx_buffer angekommen sind, bevor du in der Schleife die Zeichen vom usart_rx_buffer zu den Variablen kopierst... Nach dem ersten Interrupt ist natürlich auch nur 1 Zeichen im usart_rx_buffer...
Grüße,
Micha
Nach oben

Sash
Beiträge: 10
Registriert: 25.02.2009, 15:17:38

Re: ATMEGA644P beide USART nutzen...?

  • Zitieren
    • Zitieren

Beitrag von Sash » 26.03.2009, 16:20:52

Hallo klemic,

danke für den heißen Tipp mit dem warten bis der ganze String drin ist.
Ich dachte, dass bei der Auslösung des Interrupts der ganze String eingelesen wird.
Bei nähererm hinschauen hab ich es dann au gemerkt, dass das nicht so ist.
Nun bin ich soweit, dass mir der String da angezeigt wird, wo normalerweise die AD-Werte (0-5) stehen (für Temperatur 20.114). Die Zahlen bei AD-Kanal 0-5 ändern sich auch bei warm bzw kalt machen der Sensoren.

Nun aber die Frage der Fragen:
Gibt es eine Funktion mit der ich die Werte aus dem usart_rx_buffer wieder zu einer floar zusammensetzten kann?

Danke schonmal für die schnelle Hilfe
Gruß
Sash
Nach oben

Klaus
Beiträge: 409
Registriert: 17.02.2008, 12:18:39

Re: ATMEGA644P beide USART nutzen...?

  • Zitieren
    • Zitieren

Beitrag von Klaus » 26.03.2009, 17:15:22

Hi,

warum überträgst Du eigentlich einen String?
macht das die Sache nicht nur unnötig kompliziert?

Hol Dir einen Zeiger auf Deine Variable und sende einfach die paar Byte über die Schnittstelle. Im Webserver kopierst Du einfach die Bytes zurück in eine Variable (gleicher Typ natürlich).

mfg
Klaus
Nach oben

Sash
Beiträge: 10
Registriert: 25.02.2009, 15:17:38

Re: ATMEGA644P beide USART nutzen...?

  • Zitieren
    • Zitieren

Beitrag von Sash » 26.03.2009, 17:59:31

Hallo,

habe das Problem gelöst.
Hab einfach die Funktion:
strtod(const char *s, char **endptr);
genommen und gut is. :wink:
Jetzt kann ich von meinem PC aus und von unterwegs, meine Wasserwerte überprüfen :D

Danke nochmal an klemic für die Hilfe oder den Hinweis mit dem Interrupt.

Zum Thema Zeiger.
Damit hab ich so meine liebe Not, denn das versteh ich trotz stundenlangem grübeln immernoch nicht.
Aber die Idee an sich ist nicht schlecht.

Gruß
Sash
Nach oben

Klaus
Beiträge: 409
Registriert: 17.02.2008, 12:18:39

Re: ATMEGA644P beide USART nutzen...?

  • Zitieren
    • Zitieren

Beitrag von Klaus » 26.03.2009, 23:50:56

Hi,
Ein Zeiger ist nur die Adresse einer Variablen - also die Adresse wo die eigentlichen Daten im RAM abgelegt sind.

&Variable liefert Dir die Adresse wo die Daten liegen.

int i=2; definiert eine Integer Variable und weist den Wert 2 zu
int *Adr; - enthält die Adresse einer Integer Variable

Adr = &i; Der Zeiger Adr wird mit der Adresse der Variablen i geladen

i=3; oder *Adr = 3; weist jeweils i den Wert 3 zu




int i=12345;
unsigned char *Adr; Zeiger auf eine Byte Variable
Adr = (char*)&i;

UDR = Adr[0];
warten bis übertragen
UDR = Adr[1];

So überträgst Du die ganze Variable.

Der Zeiger kann natürlich auch auf ein Array oder ganze Strukturen zeigen.
So ist es möglich einfach ganze Datenblöcke zu übertragen ohne die hin und herwandlerei.


mfg
Klaus
Nach oben

Sash
Beiträge: 10
Registriert: 25.02.2009, 15:17:38

Re: ATMEGA644P beide USART nutzen...?

  • Zitieren
    • Zitieren

Beitrag von Sash » 27.03.2009, 17:53:32

Hallo Klaus,

danke für die kleine Einweisung in Sachen Zeiger.
Das hört bzw. liest sich doch recht spannend und scheint einfacher zu sein*g*
Da schein ich doch mit dem Zeiger fast was verpasst zu haben.

Werde das doch gleich mal testen.

Danke und Gruß
Sash
Nach oben

Benutzeravatar
Ulrich
Site Admin
Beiträge: 3054
Registriert: 29.02.2004, 18:12:19
Wohnort: Siegen
Kontaktdaten:
Kontaktdaten von Ulrich
Website

Re: ATMEGA644P beide USART nutzen...?

  • Zitieren
    • Zitieren

Beitrag von Ulrich » 28.03.2009, 13:47:51

Ein Zeiger kann auch auf eine Funktion verweisen so wie ich es im Stack.c mache.
Nach oben

Sash
Beiträge: 10
Registriert: 25.02.2009, 15:17:38

Re: ATMEGA644P beide USART nutzen...?

  • Zitieren
    • Zitieren

Beitrag von Sash » 07.04.2009, 19:52:52

Also das mit dem Zeigen und dem Array und der daraus resultierenden Übertragung der BIts hat soweit funktioniert.

Nun habe ich aber noch das Problem, dass ich gerne die Kamera gleichzeitig mit anschließen würde.
Ich hab es schon hinbekommen entwerder die über die USART1 Schnittstelle übertragenen Daten anzuzeigen, oder ein Bild der Kamera, die am USART0 hängt.

Um die zweite Schnittstelle abzuschalten muss ich ja nur im Register der zweiten Schnittstelle die Bits RXEN1 und RXCIE1 auf "low" schalten.
Zumindest funktioniert es damit :)
Aber wo muss ich den Befehl für das low setzten bzw den Befehl der die 2 Bits wieder auf high setzt im Programm unterbringen? Hab schon ein paar Stellen versucht, aber immer kommt entweder das eine, oder das andere.

Das zweite was mir vorhin aufgefallen ist:
Bisher hab ich die Version 1.1.8 benutzt und bei der Version war die LED für die Anzeige, dass das LAN Kabel eingesteckt ist blau und die LED fürs senden rot.

Nun hab ich die Version 1.2.1 genommen und da alles reingewurstelt und nun sind die 2 LEDs vertauscht?!?! Also rot=Kabel dran und blau=senden.
Nehm ich nun kurz die Versorgungsspannung weg und lege sie wieder an, dann ist plötzlich blau=Kabel und rot=senden.

Ist das normal??

Gruß
Sash
Nach oben

Benutzeravatar
Ulrich
Site Admin
Beiträge: 3054
Registriert: 29.02.2004, 18:12:19
Wohnort: Siegen
Kontaktdaten:
Kontaktdaten von Ulrich
Website

Re: ATMEGA644P beide USART nutzen...?

  • Zitieren
    • Zitieren

Beitrag von Ulrich » 07.04.2009, 21:40:14

Ja das ist normal die LEDs sind frei konfigurierbar!
Nach oben

Sash
Beiträge: 10
Registriert: 25.02.2009, 15:17:38

Re: ATMEGA644P beide USART nutzen...?

  • Zitieren
    • Zitieren

Beitrag von Sash » 07.04.2009, 21:48:24

Ok, gut zu wissen.

Hast du vielleicht noch einen Rat für mich, wo ich denn die Befehle zum abschalten bzw. anschalten der 2. USART Schnittstelle hinschreiben muss wärend die Übertragung des Bildes von der Kamera zum Webserver läuft?

Gruß
Sascha
Nach oben

Antworten
  • Druckansicht

13 Beiträge • Seite 1 von 1

Zurück zu „ETH_M32_EX“



  • Foren-Übersicht
    • Alle Zeiten sind UTC+02:00
    • Alle Cookies löschen
  • Alle Zeiten sind UTC+02:00
  • Alle Cookies löschen

Powered by phpBB® Forum Software © phpBB Limited

Deutsche Übersetzung durch phpBB.de

Datenschutz | Nutzungsbedingungen

 

 

sitemap  |  e-mail   |  datenschutz   |  impressum