PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 2 uart mega8?!



hacker
28.07.2005, 21:18
hi,

kann man bei nem mega8 die HW uart und die SW uart gleichzeitig nutzen? ich will über die SW uart 2 mC miteinander kommunizieren lassen und der eine soll über HW uart mit dem pc verbunden sein...geht das? weil ich I2C nicht kapier will ich die 2 mC nicht darüber kommunizieren lassen ^^

gruss hacker

uwegw
28.07.2005, 21:26
versuch macht kluch...

SprinterSB
28.07.2005, 22:59
Was ist denn ne SW UART?
Du willst die UART per Software emulieren?

olfi13
29.07.2005, 03:49
Wie weit sind Deine µC's denn voneinander enfernt?
Sind sie nah beieinander geht das mit dem direkten kommunizieren, sonst brauchste einen Bus.
Eine Soft-Uart ist allerdings relativ langsam im Vergleich zur echten.

Beschreibe dochmal was Du erreichen willst.

Gruß, olfi

hacker
29.07.2005, 08:26
hi,

also ich hab auf meinem roboter einen hauptprozessor und einen kleineren für die komplette sensorik. die 2 will ich mit SW uart mit einander kommunizieren lassen, dass der kleinere prozessor die schon ausgewerteten daten an den hauptproz. schickt. dieser soll über die HW uart über mit dem pc in kontakt stehen.

weswegen ich kein I2C nehmen will steht schon in meim ersten post :D

wäre über hilfe dankbar

gruss hacker

bhm
29.07.2005, 08:44
Soweit ich weis (ich benutze es selbst nicht) gibt es in Bascom SW uart Routinen, in C hab ich noch keine gesehen, gibt es aber sicherlich auch.
Auf der anderen Seite gibt es in Bascom auch fertige I2C Routinen, dazu muss man nicht verstehen wie's geht.
Mit dem Programmieren des I2C-Busses hab ich übrigens trotz Beispielprogrammen auch recht lange gebraucht (in C). Ich glaube jetzt gehts, wenn Interesse besteht ...
ciao .. b

Pascal
29.07.2005, 13:57
für diesen Einsatzzweck ist I²C ziemlich gut geeignet, ich würde es mir wirklich nochmal überlegen, ob du dir das nicht doch nochmal anschaust

such mal im Forum danach, da findest du sicher Hilfe dazu, und falls noch Dinge unklar sind, kannst du ja fragen

SprinterSB
29.07.2005, 15:26
Auch wenn es SW-Routinen dafür gibt, wird es nicht einfach werden das Timing einzuhalten. Während deine langsame SW-Routinen am Datenschaufeln sind, soll bestimmt noch anderes Zeug parallel passieren und nicht der Rest des Systems lahm liegen.
Ohne Hardwareunterstützung wird das fehleranfällig.

I2C: ist ja keine Geheimwissenschaft, und im Netz gibt es Bibliotheken für das Zeug.

SPI: Du kannst auch das SPI (Serial Peripheral Interface) des Mega8 zum Datenaustausch nutzen. Ein 8-Bit Register des Masters wird mit einem des Slaves zu einem 16-Bit-Schieberegister zusammen geschaltet. Genial einfach, schnell und leichter zu überschauen als I2C. Im Manual gibt's sogar Code-Schnippsel für Master bzw Slave in Assembler und in C.

hacker
29.07.2005, 17:41
ok ich glaub ich guck mir I²C doch mal an...aber wenn ich dann nachher blödes zeug frag seid ihr schuld :D
gruss hacker

chr-mt
29.07.2005, 18:03
Hi,
ist die Frage, welche Geschwindigkeit du denn brauchst.
Ich hatte mal so'ne Schaltung mit Hardware und Software UART gebaut
(lange her) .
Es ging damals um eine Funkübertragung.
Der HW UART empfing Fernsteuersignale mit 9600 und sendete dann mit 38400 die beasrbeiteten Daten.
Ich musste damals den Software UART dazu nehmen, da ich Even Parity brauchte.
Programmiert hatte ich das in Bascom.

Gruß
Christopher

hacker
29.07.2005, 18:26
jo eigentlich is des genau de anwendung für das ich das brauche :) hmm was ist even parity? hab mich grad bisschen über i2c informiert...ich glaub so langsam freunde ich mich mit ihm an ^^ aber die dummen fragen werden sicherlich noch kommen ;)

gruss hacker

chr-mt
29.07.2005, 19:08
Bei der seriellen Übertragung kannst du ja verschiedene Parameter angeben.
Baudrate, Datanbits, Stoppbits usw.
Unter anderem auch das Paritätsbit.

Die Summe aller 8 Bits ist entweder gerade "even" oder ungerade "odd"
Diese Information wird als 9tes Bit mitgesendet, damit man weiß, ob die Übertragung OK war.
Man kann aber nicht genau sagen, wo der Fehler und kann auch keine Fehler erkennen die sich aufheben, also wenn zwei Bits auf einmal falsch sind.
In den meisten Fällen wird das Paritätsbit nicht mitgesendet (Parity=None)
9600,n,8,1 ist also:
9600 Baud, keine Parität (Parity None), 8 Datenbits, ein Stoppbit

Es gibt aber auch Geräte, die zwingend ein Paritätsbit mitgesendet haben wollen und das war bei mir der Fall.

Gruß
Christopher

hacker
29.07.2005, 22:15
ahja ok danke für die erklärung :)

HelgeK
30.07.2005, 06:40
Hi,
ich habe auch noch nicht gelesen wie schnell die Kommuniktion bei dir sein soll. Dabei habe ich aber auch gleich noch ne Frage im Bezug auf die Antwort von Christopher. Wie schaltet man in BASCOM die Geschwindigkeit um, wie du es beschrieben hattest(Empfang 9600 und senden 38400)? :-k
Aber zurück zum eigentlichen Problem! :-)
Vielleicht ist I2C für dich die bessere Lösung, da du auch noch andere Komponenten anschließen kannst. Der Markt bittet da ja so einiges. Läßt sich im übrigen auch gut in BASCOM programmieren. Ich selber habe das schon mal für einen 8051 gemacht(in C und Assembler und mit BASCOM mache ich das gerade für ein EEPROM auf einen mega8). Ist garnicht soo wild. \:D/
Wie schnell sollen eigentlich die Daten zu PC sein?
Ich Frage deshalb, weil aus meiner Sicht die Daten zwischen den beiden Prozessorplatine(Hauptprozessor u. Sensorikp.) schneller übertragen werden müssen. Das ist natürlich von Anwendung abhängig, wie oft und wie viele Daten von der Senorik geschickt werden.

Viele Grüße
Helge

chr-mt
30.07.2005, 08:48
Hi,

Wie schaltet man in BASCOM die Geschwindigkeit um, wie du es beschrieben hattest(Empfang 9600 und senden 38400)?
Die Baudraten schaltet man einfach mit dem BAUD Befehl um.
Das geht auch innerhalb des Programms.
Ich mache das immer, um im Menü die Baudraten umschalten zu konnen.
Bei der beschriebenen anwendung hatte ich allerdings zwei Schnittstellen offen, den HW UART zum Empfang der Daten, den SW UART zum weitersenden.
Dadurch mußte ich nicht umschalten.
Der HW UART war fest auf 9600, der SW UART fest auf 38400.

Gruß
Christopher

hacker
30.07.2005, 09:44
ja hmmm..ich kenn mich da net so aus, wie schnell des jetzt sein soll..hatte vor zu probieren :D von sensorproz. zum hauptproz. sollen folgende daten geschickt werden : liniensensor, 4 IS471, ultraschall, spannung und strommessung, 2 bumper, 2 sharp

vom hauptproz. zum pc : alle daten weitergeschickt, fernsteuerung mit pwm einstellungen

also ich hab keine ahnung welche baud ich benutzen soll...wie gesagt ich hätt porbiert ^^

erstes i2c problem *g* :

wie geb ich dann meinem sensorproz. eine slave adresse.? irgentwie mit so bilbiotheken kann das sein?

danke schon mal im vorraus :)

gruss hacker

uwegw
30.07.2005, 10:41
erstes i2c problem *g* :

wie geb ich dann meinem sensorproz. eine slave adresse.? irgentwie mit so bilbiotheken kann das sein?


ich hab bis jetzt in bascom noch keine mitgelieferte funktion für nen i2c-slave gefunden... du müsstest also mal googeln und notfalls selbst was zusammenbasteln...

in E-Lab AVRco (pascal) ist sowas schon dabei... damit hab ich meine controller recht schnell vernetzt bekommen...

hacker
30.07.2005, 11:22
hmm anscheinend gibts des nur als kostenpflichtige variante..die softwarelösung...aber :

[qoute]1.
Es dürfen keine anderen Interrupts aufgerufen werden, sonst verpaßt Du
das Startbit.

2.
Gibt es irgendeinen Fehler auf dem I2C-Bus, hängst Du für immer in dem
Interrupt fest, d.h Dein Hauptprogramm steht.

3.
Der Interrupt wird solange nicht verlassen, bis der I2C-Transver
komplett beendet ist, d.h. Dein Hauptprogramm steht für diese Zeit.[/quote]


geht des nich doch irgentwie anders?

gruss hacker

SprinterSB
30.07.2005, 12:25
Für die Slave-Adresse gibt es das Register TWAR (Mega8-Handbuch Seite 181).
Die Adresse kannst du frei wählen, sie ist 7 Bit breit, muss ungleich 0 sein und nicht mit einem anderen TWI-Device kollidieren. In deinem Falls gibts nur einen Maste und 1 Slave, da ists einfach.
Für die Master-Routinen kannst du die Routinen von Fleury nehmen, Links findest du im Forum "Artikel / Testberichte / Grundlagen".
Allerdings sind die Routinen in C (für TWI-Hardware, das twimaster.c) oder in Assembler (I²C in Saftware, i2cmaster).
In was programmierst du denn?

hacker
30.07.2005, 13:23
ich programmiere in bascom basic und hatte eiegtnlich auch nicht vor umsteigen auf etwas anderes...

HelgeK
30.07.2005, 19:46
Ich habe auch noch was gefunden. Bei Atmel gibt es einen Appplication note : AVR302: Software TWI Slave Implementation.
Den Link finde ich gerade nicht, da ich mir das PDF gesichert hatte.
Vielleicht hilft das ein klein wenig. [-o<

Viele Grüße
Helge

SprinterSB
31.07.2005, 09:53
Zurück zum UART:

Da gibt es noch eine ganz andere Lösung, für die du allerdings etwas Hardware brauchst (MOS4551, 1.10€ bei Reichelt).

Mit einem analog-Schalter wie dem CD4551 = MC14451 könntest du RxD und TxD zwischen Slave und PC umschalten.

"Quad 2-Channel Analog Multiplexer/Demultiplexer" (http://www.datasheetarchive.com/datasheet/pdf/13230.html)

Am Master bräuchtest du eine I/O-Line zum Schalten, der Slave (Sensor-Daten-Sammler) sieht aus wie sonst auch.
Schaltest du Richtung Slave, kannst du mit ihm eine Kommunikation starten und Daten senden/abfragen. Initiiert wird die Abfrage der Daten vom Master.
Um Daten zum PC zu übertragen/abzufragen, schaltest du Richtung PC.
Falls du Daten vom PC zum µC schicken willst (PC initiiert), dann käme noch eine Flusssteuerung hinzu XON/XOFF (Software) oder RTS/CTS (Hardware).
An weiterer Hardware noch 2 Widerstände als Pullups, damit offene Leitungen nicht rumhampeln.

hacker
31.07.2005, 11:37
des wär auch eine idee...aber des würd nicht gehen bei mir...weil so wie ich des verstanden habe, is immer nur eine verbindung aktiv..wenn ich sag ich mal meine ausgewerteten daten an den pc schicke, kann ich mit dem hauptproz. nicht mehr auf die sensor daten reagieren, evt. ausweichmanöver einleiten..etc. weil er sie in dem moment ja nicht empfangen kann oder seh ich des falsch?

des is doch schon seltsam...alle schreiben bei so einer frage gleich: da ist am besten i2c zu benutzen..aber anscheinend hat des noch keiner in bascom gemacht?!

@helgeK:

des hab ich auch schon gefunden..ist aber ja auch eine softwareseite lösung und zudem noch kostenpflichtig oder?


gruss hacker

SprinterSB
31.07.2005, 21:16
Naja, wenn du zB über I2C oder sonst irgendwas mehrer µC zusammen hängst, dann kannst du auch nicht *gleichzeitig* Sensordaten ampfangen *und* was vom Master zum PC schicken. Alles, was du machen kannst, ist sequenziell zu arbeiten; du hast ja keinen parallel-Rechner.
Was zum PC schicken dauert ja nicht so lange. Oder sind es MB-weise Daten?
Selbst wenn, kannst du ne Pause machen, den Slave auf Daten abfragen und danach weiter mit dem PC reden. Wenn du alle 1 ms auf die Daten des Slaves schaust, sollte das doch zu machen sein.
Alternativ legst du ne Leitung vom Slave auf einen externen Interrupt des Masters, um ihn wachzurütteln daß er endlich seine Daten abholt.
Und es ist nicht so, daß der Slave unaufgefortet schickt, sondern die Daten werden vom Master abgefragt. Ein Protokoll dazu must du dir eben überlegen (musst du bei I2C oder wie auch immer ja auch).

Und was I2C in BASCOM angeht, da gibt es I2C-Master-Routinen.
Für den Slave genügt es prinziell das Handbuch zu haben, zu wissen, wie man auf Register zugreift und etwas Gehirnschmalz. Das geht oft schneller und besser als sich im Web den Wolf zu suchen und Zeug zu finden das dann doch nicht geht ;-)

hacker
01.08.2005, 10:03
ok, dann guck ich mal..:) aber die fragen werden wieder kommen ^^

gruss hacker