PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmega16 mit pc verbinden?



Zardest
07.04.2012, 18:45
Editieren
Hallo

Ich habe mal gehört, dass ich meinen atmega16 auch mit dem pc verbinden kann und im dann steuern wie geht das? :confused:

Ich programmiere mit Bascom und dem My Smart USB light

Kampi
07.04.2012, 18:55
Hi,

das kannst du auf viele verschiedene Weisen realisieren. Entweder du stattest deinen Controller mit einem LAN-Interface aus oder du nimmst USB oder die Möglichkeit die so gut wie jeder Controller beherrscht ist über UART/RS232. Dazu sendest du z.B. via TeraTerm was über RS232 an deinen Controller und er reagiert dadrauf.

Zardest
07.04.2012, 19:16
Danke

Cool wäre ja lan aber wie geht das denn/was brauche ich dafür
und wie müsste ich den rs232 Port anschließen hab noch ne rs232 Kupplung hier liegen kann ich auch rs232 usb Adapter benutzen also von usb auf rs232 und dann an den *atmega

mfg Zardest

Thegon
07.04.2012, 19:27
Diese Adapter kann man an sich schon benutzen, um eine RS-232 Kommunikation aufzubauen. Man sollte sie aber als Fehlerquelle, wenn einmal etwas nicht funktioniert, nicht außer Acht lassen, weil so ein Adapter ist eben ein Adapter und keine "echte" RS232.

Die Standardschaltung mit Max232 ist hier recht gut erklärt:
http://www.rn-wissen.de/index.php/AVR-Einstieg_leicht_gemacht#Daten_und_Texte_zum_PC_.C3 .BCbertragen

Den Max232 Braucht man, weil der AVR mit 0V - 5V - Logik arbeitet und der PC aber mit 12V bzw. minus 12V. Auch invertiert der Max232 das Signal noch, denn der AVR arbeitet mit Posetiver Logik und der PC mit Negativer.

Auch ein einfaches Beispielprogramm ist dabei, wenn du in Bascom Programmierst. ;-)


PS: Hier wird zwar ein ATmega 32 verwendet, doch mit dem ATmega 16 sollte es ganz gleich gehen, die sind auch Pinkompatibel und haben soweit ich weiß bis auf den Flash keine Unterschiede, oder?

Mfg Thegon

Zardest
07.04.2012, 20:11
Danke

Das wäre ja noch zu bewältigen sehe ich das richtig das Ich dann vom ganzen rs232 nur 3 pole benötige?

Und wie funktioniert das Ganze über lan? Das würde mich jetzt mal interessieren, weil ich hab ne s7 die auch über lan gesteruert wird

Kampi
07.04.2012, 20:11
Mega16 und Mega32 sind Pinkompatibel ja.
Und zum Thema LAN gibt es dieses Modul hier:

http://www.eztcp.com/en/products/ezl-70.php

Dort schickst du per UART oder RS232 oder RS422 Daten rein und er macht dann eine Homepage wo du mit jedem Gerät in deinem LAN drauf kannst.
Über nen Router mit DynDNS kannst du dann z.B. eine übers Internet gesteuerte Application entwickeln.
Das ist aber etwas komplizierter ;)
Nimm erstmal die "Standart" UART zu RS232 Schaltung (alternativ mit USB wie oben erwähnt).
Und für UART/RS232 benötigst du nur Rx, Tx und GND (den du u.U. auch weglassen kannst).

Zardest
07.04.2012, 20:18
Danke

Ich dachte das wäre alles bischen einfacher :D
ich glaub ich bleib dann bei der rs232 Verbindung mit diesem mx232
kann ich diesen mx232 verwenden?

http://www.conrad.biz/ce/de/product/152281/IC-MAX232N-TID/SHOP_AREA_18973&promotionareaSearchDetail=005

Neutro
07.04.2012, 20:19
Hier ist noch eine schöne Beschreibung aus unserem Wiki:
http://www.rn-wissen.de/index.php/Windows_Programm_zum_Steuern_des_AVR%27s

Gruß

Neutro

Kampi
07.04.2012, 20:37
Generell musst du bei der Auswahl des MAX232 nicht viel beachten ;)
Aber den den du oben gepostet hast kannst du ohne bedenken verwenden.

Zardest
07.04.2012, 20:54
Ein Danke an alle
ich werde euch das Ergebnis mitteilen.

Zardest
08.04.2012, 19:06
Hallo

Ich habe jetzt eine Frage in dem plan den ihr mir geschickt habt wie ich die rs232 Schnittstelle bauen kann unten rechts soll das Heißen die 3 pole müssen an Port 1,2,3 oder 1,2 und 3, weil das grad vom Stecker her so ist der im Schaltplan verwendet wurde

http://www.rn-wissen.de/images/6/65/Avrtutorial_grundschaltung_max232.gif

Und wie würde das Ganze über usb Funktoniren ist das so aufwendig wie bei einer lan Verbindung oder eher wie bei der sr232 Verbindung

Kampi
08.04.2012, 19:16
Hi,

also bei einer RS232 Verbindung musst du Rx und Tx kreuzen (weil Tx - Transmit muss auf Rx - Recieve gehen).
Das heißt T1OUT verbindest du mit Rx von deinem RS232 Kabel und R1IN mit Tx von dem Kabel.

http://de.wikipedia.org/wiki/RS-232

Wenn es nicht funktioniert einfach mal Rx und Tx miteinander tauschen :). Häufiger Fehler das man sich da vertut und jeder hier hat diesen Fehler schon mehr als 1x gemacht :D
Wenn du das über USB machen willst brauchst du einen FT232

http://www.mikrocontroller.net/attachment/39439/ft232r.png

Und dann verhält sich der USB wie eine RS232 Schnittstelle d.h. über ein Terminal kannst du dem Controller dasselbe senden wie über RS232. Wenn du mehr mit USB machen willst, brauchst du andere ICs bzw. nen Controller mit integriertem USB.
Allerdings gibt es den FT232 nur als SMD d.h. du brauchst eine fertige Platine mit dem Chip drauf ;)

Zardest
08.04.2012, 19:30
Danke erst einmal
aber ich blicke da mit tx und rx grade nicht durch wie tauschen die Verbindungen zwischen dem mx232 und dem atmega kreuzen oder wie?

Ist es den auf dem Bild in meinem Link richtig oder müssen die noch gekreuzt werden?

http://www.rn-wissen.de/images/6/65/Avrtutorial_grundschaltung_max232.gif

Kampi
08.04.2012, 19:43
Nein die sind richtig.
Aber du musst aber in der Verbindung von Max232 zum PC noch Rx und Tx kreuzen.

Zardest
09.04.2012, 01:27
Also muss ich nur die kreuzen die zum pc gehen aber der Rest ist in dem plan richtig? :confused:
Was würde denn Passiren, wenn ich sie falsch herum anschlisse, außer das Es nicht geht würde noch einer der ic's drauf gehen oder überleben die und der pc das?

021aet04
09.04.2012, 08:30
Wenn du die falsch anschließt funktioniert einfach die Verbindung nicht.

MfG Hannes

Thegon
09.04.2012, 10:00
Du brauchst vom RS232 Stecker (vom PC) eigentlich nur drei Pins:
Nummer: Funktion:


2, RX, über diese Leitung "wandern die Daten in den Computer hinein"
3, TX, über diese Leitung "Sendet der computer hinaus"
5, GND, eben gemeinsame Masse damit die Übertragung funktioniert
Auch der Max hat Pins: (Im Schaltplan aus dem RN)

über Pin 13 kann er emfangen
über Pin 14 kann er Senden.

Nun den Pin 13 des Max232 (auf dem er "lauscht") mit dem Pin 3 des Steckers verbinden (dort sendet der computer) und umgekehrt, also 14 mit 2.
Gemeinsamen GND nicht vergessen, dann sollts klappen ;-)
und wenn nicht, einfach mal vertauschen;-)

Villeicht kommts hier klarer rüber: (etwas weiter unten ist ein Schaltplan)
http://sodoityourself.com/max232-serial-level-converter/

Mfg Thegon

Zardest
05.05.2012, 15:29
Hallo

Ich habe die Platine jetzt fertig sie funktioniert auf einwandfrei mit dem rs232 usb Adapter und die Frage wie kann ich variablen übertragen ich hab mir das so vorgestellt ich tippe den Namen bei putty ein und dahinter die Zahl die in die variable rein soll
wie muss ich das Programmieren habt ihr da eine Seite oder könnt ihr mir ein Beispiel geben?

mfg Zardest

Kampi
05.05.2012, 15:59
Hallo,

ein Beispiel habe ich jetzt nicht. Aber prinzipiel kannst du die ganze Eingabe in einem String speichern und diesen String dann auswerden, sprich du suchst dir so den Variablennamen raus und den Inhalt.
Du kannst z.B. sagen du machst zwei Inputs nacheinander. Beim ersten gibst du den Namen der Variable ein und beim zweiten den Wert.

Zardest
05.05.2012, 16:08
:confused:

Ich muss es sehen sonst kann ich es irgendwie wie nicht verstehen

Thegon
05.05.2012, 17:07
Ich kenne mich jetzt mit PuTTY nicht aus, als Terminalprogramm kann ich dir HTerm sehr empfehlen, da hat man sozusagen die Vollmacht über seine Schnittstelle ;-) einfach mal danach googlen ;-)

Mit HTerm kann man nicht nur ASCII Zeichen Senden, wie bei anderen Terminalprogrammen, sondern auch Hexadezimal, Dezimal, Binär usw.

Man könnte also immer zwei Zahlen senden, eine ist die Nummer der Variable und die zweite der Inhalt.
Im Programm des AVR kann man dann abfragen:

If ersteZahl = 1 then
'Inhalt in die erste Variable schreiben
Variable1 = zweiteZahl
elseif ....
(Pseudocode)

Man würde dann per UART die beiden Zahlen "ersteZahl" und "zweiteZahl" einlesen, und dann entscheiden, welche Variable, (im Bsp. Variable1) jetzt "adressiert" wurde oder so. Bei diesem Beispiel handelt es sich um Bytevariablen, weil bei Uart imm er ein Byte nach dem anderen gesentet wird, wenn man beispielsweise eine 32bit Zahl übertragen möchte, müsste man halt tricksen.
Ist jetzt natürlich nur ein minimalistisches Beispiel aber so vom Prinzip her macht man das ja so ;-)

Mfg Thegon

Andre_S
05.05.2012, 18:15
Hallo

Ich habe die Platine jetzt fertig sie funktioniert auf einwandfrei mit dem rs232 usb Adapter und die Frage wie kann ich variablen übertragen ich hab mir das so vorgestellt ich tippe den Namen bei putty ein und dahinter die Zahl die in die variable rein soll
wie muss ich das Programmieren habt ihr da eine Seite oder könnt ihr mir ein Beispiel geben?

mfg Zardest

Hallo,

für die Test's ist ein Terminalprogramm sicherlich ausreichend, aber wolltest Du später nicht "richtig" steuern?

Eventuell schreibst Du Dir gleich ein passendes Programm. Von MS bekommt man die Visual Studio Express Version kostenfrei hier:
http://www.microsoft.com/germany/express/download/default.aspx
zum Download (Basic; C#; C++)

Ein paar Daten ohne weiteren Komfort kann man dann in C# in "etwa" so übertragen:
http://www.mycsharp.de/wbb2/thread.php?threadid=92123&hilight=COM1

Geholfen wird Dir sicher auch dabei...
Welchen Umfang muss das Programm den besitzen, also in welcher Form (wie Auslösen) willst Du die Befehle/Daten (welchen Umfang) mal senden ...


Gruß André

Zardest
05.05.2012, 23:11
Danke erst einmal

Ich will eigentlich nur die Variablen auslesen können was ich schon schaffe aber ich will einen wert eingeben und diesen dann in der Variable speichern also im Grunde nur die variablen verändern

Kampi
05.05.2012, 23:19
In welcher Sprache programmierst du den? In Basic macht dieser Befehl sowas:

Input "Neuer Wert der Variable: " , Variable

Da erscheint im Terminal der Text zwischen den "" und das was du eingibst wird in der Variable "Variable" gespeichert. Allerdings bleibt das Programm solange stehen bis du was eingegeben hast. Wenn du das nicht möchtest, musst du den Rx Interrupt nutzen.

Andre_S
06.05.2012, 10:50
Danke erst einmal

Ich will eigentlich nur die Variablen auslesen können was ich schon schaffe aber ich will einen wert eingeben und diesen dann in der Variable speichern also im Grunde nur die variablen verändern

Hallo,

hatte ich schon prinzipiell so verstanden allerdings ist mir zum Zeitpunkt der Umfang noch unklar da Du auch immer wieder von "Variablen" in der Mehrzahl sprichst. Vieleicht noch mal kurz von meiner Seite ein sehr vereinfachtes Beispiel:

Sollte prinzipiell mehr als ein einzelnes Byte übertragen werden ist es meist sinnvoll, nicht nur bei dynamischen Datenmengen, die Übertragung mit Start und einem Endbyte zu kennzeichnen welche in den Informationen nicht vorkommen , dies vor allen Dingen wenn mehrere Byte’s übertragen werden sollen. Eine Bestätigung in Richtung PC, also Kommunikation, lasse ich mal außen vor. (Ist aber aus meiner Sicht bei vielen Anwendungen sehr wichtig!)

Überträgst Du allerdings nur einen einzelnen Wert ist der folgende „Aufwand“ nicht nötig und Du musst nicht weiter lesen.

Wir müssen als erstes unterscheiden ob die Variablenwerte jeweils gemeinsam oder getrennt übertragen werden sollen. Gemeinsam wäre zu Bsp. ein Hexstring mit 5 in der Reihenfolge fest angeordneten Variablenwerten. Im folgenden im Wertebereich 0 – 250. Der Einfachheit halber können wir so Daten/Werte von „FC“ und „FF“ ausschließen und diese für Start- und End-Byte nutzen.
Beispielstring:

„FC 33 4A 01 F0 AA FF“

„FC“ wäre das Start-Byte, dann kommt „Variablenwert_1“ = 0x33 (dez 51),… bis „Variablenwert_5“ = 0xAA (dez 170), und das End-Byte „FF“ zur Orientierung im MC wann die Daten komplett aus dem „Empfangspuffer“ gelesen und verarbeitet werden können.


Übertragen wir allerdings getrennte Variablenwerte (wie @Thegon schon schrieb) müssen wir den jeweiligen Variablen zur Unterscheidung einen Namen = Wert zuordnen. "Nennen" wir dem Variablenwert_1 = 0x01; usw…, Variablenwert_5 wäre dann 0x05.
Beispielstring:

„FC 01 33 FF“

„FC“ wäre dann wieder das Start-Byte. 0x01 wäre der „Name“ für Variable zwecks Zuordnung zum „Variablenwert_1“ und der folgende Wert wäre also dieser Variablen zugeordnet… usw. Wollen wir nun den Werte „AA“ (dez 170) der „Variablen_5“ übertragen würde der String so aussehen:

„FF 05 AA FF“


Je nach Aufgabe musst Du nun noch den Sendevorgang am Computer auslösen oder automatisieren. Das kommt jetzt auf die Aufgabe an. Natürlich auch bei einzelnen wenigen oder gar einem Wert mit „händischer“ Eingabe des selben.


Deshalb meine Frage, was möchtest Du denn eigentlich genau steuern? Wie viele unterschiedliche Variablen benötigst Du und wie groß sind die entsprechenden Wertebereiche bzw. „Zahlen“? (Byte, Word etc.) Eventuell kannst Du ja der Einfachheit halber ein passendes PC Programm bekommen, dazu wären aber mehr Informationen notwendig.


Gruß André

Zardest
06.05.2012, 16:01
Also eigentlich will ich nur 5 Variablen verändern
sind alles integer:

dim p1 as integer
dim p2 as integer
dim p3 as integer
usw.

Und nun will ich mit dem pc einfach die werte und den variablen verändern z.b. 1,1023 das wäre dann 1 variable und der wert 1023
so hab ich es mir vorgestellt :D

Andre_S
06.05.2012, 18:04
Also eigentlich will ich nur 5 Variablen verändern
sind alles integer:

dim p1 as integer
dim p2 as integer
dim p3 as integer
usw.

Und nun will ich mit dem pc einfach die werte und den variablen verändern z.b. 1,1023 das wäre dann 1 variable und der wert 1023
so hab ich es mir vorgestellt :D

Hallo,

das wäre kein Problem...
Wenn Du Netframework 3.5 auf Deinem Windows Rechner hast kann ich Dir ein Testtool geben:
22319

Habe ich gerade mal "zusammengeklickt" und würde wie folgt funktionieren:

Es erkennt Deine zur Verfügung stehenden Ports beim Start, Du müsstest zuerst die Baudrate (9600 voreigestellt) und anschließend den passenden Port auswählen.
Danach kannst Du Variable 1 bis 5 auswählen, (1 voreingestellt) den Wert 0-65535 (sind ja immer zwei Bytes,... nur bis 255 würde eins reichen) eingeben und per "senden" in folgendem Format über die Schnittstelle schicken:

Es wären immer 3 Byte:
1 byte (Variable) 00-05
2 Byte High-Byte des Wertes
3 Byte Low-Byte des Wertes

Variable 2 mit dem Wert 1023 würde dann folgende Bytes senden:
"02 03 FF"

Der Wert 1023 = 3 x High (256) + LOW (255)

Wenn Du es irgendwie anders brauchst auch kein Problem...
Allerdings musst Du mit dem AVR ohne mich klar kommen, da ich nur PIC in Assembler programmiere, aber im Forum gibt es ja viele AVR Kundige die da weiterhelfen können.


Gruß André