PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datenaustausch bei zwei ATMEGA32?



Jon
15.04.2006, 09:22
Hallo,
ich habe zwei ATMEGA32, die ich über TX und RX verbunden habe (wie wo anders schon beschrieben).
Jetzt die Frabe:
Ich möchte von meinem zweiten ATMEGA zum ersten ATMEGA ein Signal schicken, dass beim zweiten ein Taster betätigt wurde und der erste eine LED anschalten soll.
Wie geht das?
So?:
zweiter ATMEGA:
wenn Taster betätigt, dann print TASTERON

erster ATMEGA:
???????????????????????????,dann mache LED an

Ich habe keinen Plan ob das so geht, deswegen hoffe ich auf Antworten!

jon

bertl100
15.04.2006, 10:55
Dazu brauchst du eine Interruptroutine.
Jedesmal wenn über RXD was in den Puffer ankommt dann musst du eine String Variable mit vordefinierter Länge befüllen und danach auswerten.
Das beigefügte Beispiel ist aus meinem Projekt und muss natürlich angepassr werden.
Ist nur ein Beispiel aber die Vorgehensweise ist gleich.

Schau ,mal in der Hilfe

MFG

Bertl




Enable Interrupts
Enable Urxc
On Urxc Onrxd
Dim S_cmd As String * 4 'für rs232
Dim B_cmd(5) As Byte At S_cmd Overlay 'Liegt auf der Adresse des Strings s! rs232
Dim N As Byte 'zähl variable rs232

Main:
If N > 3 Then 'Wenn String Komplett Empfangen
Select Case S_cmd
Case "PC01" '
Print "MC01";
Print "|"; ' + Chr(13);
Porta.4 = 1
Case "PC99"
Porta.4 = 0
Porta.5 = 0
Case "PC02"
Porta.5 = 1
Gosub Messen

Case Else
Print "MC99"; ' + Chr(13);
End Select
N = 0
S_cmd = " "
End If
Goto Main

'Interruptroutine für RS232

Onrxd:
Incr N
B_cmd(n) = Udr
Return

Jon
15.04.2006, 11:11
Schau, mal in der Hilfe

Was soll das heißen? Wo?
Bei welcher Sprache?
Ich programmiere in BASCOM.

Sonst ist das denke ich einigermaßen klar. Ich werde es jetzt einfach mal ausprobieren und schauen, was passiert.

jon

bertl100
15.04.2006, 11:13
Die Bascom Hilfe!!

Suche nach On

Jon
15.04.2006, 15:21
Hallo,
ich habe mir das in der Hilfe mal angeschaut. Nur schlau werde ich daraus auch nicht (meine Englischkenntnisse sind nicht sehr gut).

Ich fände es schön, wenn jemand mit mir zusammen ein Programm machen könnte, dass ich auch verstehe und verwenden kann.

Meine Hardware für den zweiten ATMEGA:
ATMEGA32 mit 16Mhz Quarz und an Pin C0 eine Taster, der an 5V angeschlossen ist.


Mein Programm vorschlag für den zweiten ATMEGA:

$regfile="m32def.dat"
$crystal=16000000
$baud=9600

config Pinc.0=Input
Taster alias Pina.0
Portc.0=1

Do
if taster=0 then

'Hier weiß ich nicht weiter und bräuchte Hilfe

loop



Das war der zweite ATMEGA, ob das so geht und auch so verwendbar ist weiß ich nicht.
-------------------------------------------------------------------------------------
Für den ersten ATMEGA habe ich überhaupt keine Idee (außer den Anfangsdefinitionen).

Hardware des ersten ATMEGA:
ATMEGA32 mit 16Mhz und an Pin C0 eine LED mit 1kOhm Widerstand

Mein Anfang:

$regfile="m32def.dat"
$crystal=16000000
$baud=9600

config Pinc.0=Output

'????????????????????????????????

Ich würde mich freuen, wenn mir jemand mir bei meinem Programm helfen könnte, da ich Anfänger bin und kaum Erfahrung habe.

jon

bertl100
15.04.2006, 18:13
Wieso machst du am Anfang schon so komplexe Sachen??
Ich glaube nicht dass irgendjemand in diesem Forum dir ein komplettes Programm schreiben wird.
Versuch doch zuerst mal die Megas über RS232 an den PC anzuschliessen und diverse LEDs vom Terminal aus zu steuern und verwende PWM und Timer.......................
Du wirst sicherlich so wie ich Unterstützung bekommen, die Leute hier in diesem Forum sind diesbezüglich SEHR HILFREICH.
Mach immer kleine Sprünge und du wirst zum Robotervisionär.

MFG

Bertl

Hanni
15.04.2006, 18:45
das soll komplex sein ?!

Ich denke mal, bei nem Tastendruck was über die USART rausschicken und bei nem 2. Mega bei nem USART Interupt mit den entsprechenden Daten was anstellen ist net schwer ....

zumindest nicht in Assembler :P

bertl100
15.04.2006, 23:32
Für einen Anfänger wie du dich selbst betitelst schon.
Anfänger lassen einfach nur LEDs leuchten und schicken an den PC einen String und so.
Als ich anfing wusste ich nicht wie ich zwei Megas miteinander reden lassen kann.

MFG

Bertl

bertl100
15.04.2006, 23:38
Glaubst du denn dass ein Anfänger den Code den ich hier reingestellt habe einfach so ausdenken kann???
Das setzt schon einiges an Controller ung Registerkenntnissen voraus.
Abgesehen davon willst du ja ein bestimmtes Wort übertragen welches vom 2. Mega ausgewertet werden muss. Einfach irgendwas zu senden ist ja kein Problem. Wenn es keinen Unterschied macht ob du "Hello World" oder "Schwigermutter" überträgst dann ist mein Code total übertrieben. Dann brauchst du nur den Befehl "Input" oder so.

MFG

Bertl

teslanikola
16.04.2006, 00:02
Tja da muss ich Hanni recht geben,in ASM ist das ein klacks.

Aber damit du jetzt nicht gleich weinen musst habe ich dir was vorbereitet, ist ja ostern:

Ich habe dir mal ein kleines Porgramm geschrieben, dass eine LED via RS232 ein/ausschaltet. Zum einschalten der LED musst du nur an den AVR "E" senden und zum ausschalten irgen ein anderes zeichen zb "A" für Aus. Den rest musste selber rausfinden, aber ich denke mit meinem Prog kannste ne menge lernen.




$regfile = "2313def.dat"
$crystal = 3686400
$baud = 9600

Dim I As Byte

Ddrd = &B00100000 'Pin PD5 Ausgang
Led Alias Portd.5 'LED als Portd.5 festlegen

On Urxc Onrxd 'Interrupt-Routine setzen
Enable Urxc 'Interrupt URXC einschalten
Enable Interrupts 'Interrupts global zulassen


'************************************************* **

Main: 'Hauptschleife [Endlos]

Goto Main

'************************************************* **


OnRxD:
I = Udr 'Byte aus der UART auslesen
If I = "E" Then 'Wenn UART-Byte = E, dann LED an
Led = 1 'ansonsten aus
else
LED = 0
endif
Return

Sorry leute das ich ich mich wieder dabei erwischt habe den AT90S2313 zu benutzen, aber ich hab noch genug von!!! NAja auf M23 umzustellen wird nicht die welt sein.