PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mit Atmega32 über rs232 digitalports ansteuern



furiouscars
05.05.2011, 19:46
Ich bin ganz neu in diesem Forum ;)

Ich suche einen Ansatz oder einen fertigen code um über die serielle schnittstelle alle verfügbaren Digitalports des Atmega32 oder evtl auch Atmega8 high/low zu schalten.

Beispiel: ich sende über rs232 den befehl " setport 1.1 " dann sollte der erste digitalport auf high gehn. Mit " setport 1.0 " sollte er wieder auf low springen.
Selbstverständlich der 2 te digitalport dann mit setport 2.1 usw...

Das ganze für alle digitalports.

Es muss nicht zwingend setport als befehl genommen werden Auch set 1.1 oder output 1 on wäre denkbar.

Für Anregungen , Beispiele und Hilfe jeder Art bin ich sehr Dankbar :)

-schumi-
05.05.2011, 20:08
Herzlich willkommen im Roboternetz!


Das wäre ein sehr gutes Projekt zum Einstieg. Wird aber natürlich trotzdem etwas Zeit brauchen bis es dann vollständig funktioniert.

- Wie lange hat das ganze Zeit?
- Hast du schon Programmiererfahrung?
- Hast du Erfahrung mit der Elektronik allgemein? Wie gut kennst du die AVRs?

Grundsätzlicher Aufbau:
Terminal auf dem PC -> USB-Seriell-Wandler -> MAX232(N) -> Atmega8/16/32 mit Quarz

(Für diese Aufgabe tuts ein Atmega16 auch leicht, der macht das auch im Schlaf ^^)

Aber für weitere Infos müsste man deinen derzeitigen Wissenstand einschätzen können.

Eine fertige Lösung würde ich nur nehmen wenn eine Selbstentwicklung den zeitlichen Rahmen sprengen würde.

Gruß
-schumi-

furiouscars
05.05.2011, 20:28
;)
Zeitlich 2wochen maximal.
Ich habe erfahrung im elektronikbereich und im programmieren siemens steuerungen c control usw :)
Uart rs232 pegelanpassung usw alles nicht das problem, also hardwaretechnisch ist alles bereit ich weis leider nur nicht wie ich anfangen soll den atmega zu programmieren... Es fäng schon bei der auswahl des editors an ich hab ponyprog2000 und win avr bereits installiert jedoch höre ich immer wieder basecom!?
Meines "wissens" nach im code den atmegatyp definieren die taktung (ext.quarz) denk ich ist besser bei der nutzung der seriellen schnittstelle!? Oder?
Und das programm müsste nicht gerade gros sein bei den geringen anforderungen die ich ihm stelle..

Vielen Dank für die schnelle Antwort :)

-schumi-
05.05.2011, 20:40
c controlDu kannst also C? Sehr gut :-D


ponyprog2000Zwar nicht das non-plus-ultra, aber tuts auch ;-)


win avrPasst.


die taktung (ext.quarz) denk ich ist besser bei der nutzung der seriellen schnittstelle!?Ja, ist besser, weil der Quarz im Gegensatz zum internen Oszillator nicht so temperaturabhängig ist. Sonst könnte es sein dass deine Schaltung nur im Sommer funktioniert^^


Zeitlich 2wochen maximal.In abhängigkeit deines Wissenstandes durchaus zu schaffen.

-------------------------------------------

Du hast jetzt also eine Quellcode-Datei die du bereits kompilieren kannst und in den AVR laden?

Als Testprogramm einfach mal:

#include <avr/io.h>
void main (void)
{
while(1);
}Wenn das funktioniert gehts weiter ;-)

(Oder ist das der Punkt an dem du nicht mehr weiterkommst?)

furiouscars
05.05.2011, 20:58
Nein C kann ich nicht sehr gut :D ich habe mit der c control mehr im bereich ausgabe gearbeitet habe ein kleines programm geschrieben das für jeden eingang der c control einen definierten text über die rs232 an ein gsm modul sendet und als sms letztendlich versendet wird, das war nicht das problem jedoch habe ich keinerlei erfahrung mit der eingabe über rs232 also was ich zb minimal benötige um die rs232 abzufragen und bei einem bestimmten befehl zb einen digitalport zu setzen.. Am einfachsten für mich wäre ein beispiel code der auf zb. Setport 1.1 den ersten digitalport high setzt und mit setport 1.0 wieder auf low... Dann würde ich die erweiterung auf alle digitalports normalerweise selbst hinbekommen "hoff ich mal" :D

Das heist ich nehme winavr? (:

Ok sehr gut.

Nein habe leider noch keinen code oder ansatz :/

dussel07
05.05.2011, 21:24
Wenn Du erfahrung mit der C-Control hast nimm Bascom.
ansonsten - - - -
Schau mal bei Gerold Penz rein -
Kleiner Bascom AVR Kurs -
Ausgänge mit dem Computer steuern (http://halvar.at/elektronik/kleiner_bascom_avr_kurs/ausgaenge_mit_computer/) -
und
20 Ausgänge ....... (http://halvar.at/elektronik/kleiner_bascom_avr_kurs/20_ausgaenge_mit_computer/)

Programmer vorhanden?
Experimentierplatine vorhanden??

-schumi-
05.05.2011, 21:32
Nein C kann ich nicht sehr gut :-)Es wird reichen :-)


Um das oben genannte Testprogramm mal testweise auf den AVR zu kriegen:

- Irgendwo erstellst du einen Ordner dessen Name dein Projekt recht gut beschreibt und du am Namen das Projekt eindeutig identifizieren kannst

- Um den Quellcode irgendwo einzugeben brauchst du einen Editor. Normal ist bei WinAVR "Programmers Notepad" dabei, aber ich weis nicht mehr wie man da den Befehl "make all" einträgt. Deswegen würde ich dich bitten diese Anleitung http://arexx.com/rp6/downloads/RP6_MANUAL_DE_20071219.zip von Seite 51 bis 53 durchzuarbeiten. Allderdings solltest du nicht "make_all.bat" eintragen sondern "make" und als Parameter "all", so wie auf Seite 53 ganz oben erklärt.

- Dann erstellst du in Programmers Notepad eine neue Datei. Die nennst du "main.c" und speicherst sie in deinem Ordner. Dort hinein kopierst du mal das Testprogramm von oben.

- Dann schnappst du dir meinen Zip-Anhang. Den entpackst du. Zum Vorschein kommt eine Datei namens "makefile". Die kopierst du auch in den Ordner. Dann öffnest du sie in Programmers Notepad. In Zeile 8 steht "MCU = atmega32". Das musst du ggf. noch anpassen.

- Jetz wirds spannend. Jetz gehst du mit Programmers Notepad wieder zur main.c. Dann führst du das "make all" -Tool aus. (Wenn eine Fehlermeldung erscheint sag genau welche)

- Jetzt solltest du in deinem Ordner ein heilloses Durcheinander vorfinden. Unter anderem eine main.hex sollte sich dort finden, die ist ganz wichtig.

Wenn geklappt hat gehts wieder weiter ;-)

Gruß

furiouscars
07.05.2011, 12:09
Bei meiner WinAvr version sind die 3 Menüpunkte schon eingebaut / make all / make clean / make programm.... :)

Ich hab alles so gemacht wie du mir es beschrieben hast dazu hab ich noch ne Frage und zwar wenn ich datei / new file / auswähle kommt ne lange liste da hab ich dann c/c++ ausgewählt und dann ins editorfenster dein testprogramm von oben reinkopiert und die datei unter save as als main.c in meinem Ordner gespeichert in dem ich auch schon das entpackte make file gespeichert hatte. Sollte nicht in win avr links das makefile und die main.c stehen so wie wenn ich ein projekt öffne!?

Habe einen screenshot gemacht das erklärt denk ich mehr :)

wie gehts jetzt weiter?

Neutro
07.05.2011, 12:24
Vielleicht wäre das noch eine Alternative für dich:
http://www.rn-wissen.de/index.php/Windows_Programm_zum_Steuern_des_AVR%27s
Kannst dir das ja mal in Ruhe angucken. Bei mir läuft sowas schon seit jahren sehr zuverlässig, natürlich nicht genau das, aber der Ansatz stammt aus diesem WIKI.

Gruß

Neutro

furiouscars
07.05.2011, 12:35
Zum Beitrag von dussel07 :

Ich habe mir gerade Bascom installiert und den Code von Gerold Penz in den Editor kopiert dann habe ich compile durchgeführt und keinen Fehler erhalten...ist das so wie bei der c-control ich muss das Programm nur noch auf den Atmega flashen und das wars? keine main.c usw wie bei winavr?

Zum Beitrag von Neutro:

Ich werde mir den Link ebenfalls in Ruhe durcharbeiten, vielen Dank ;)

Richard
07.05.2011, 13:43
Zum Beitrag von dussel07 :

Ich habe mir gerade Bascom installiert und den Code von Gerold Penz in den Editor kopiert dann habe ich compile durchgeführt und keinen Fehler erhalten...ist das so wie bei der c-control ich muss das Programm nur noch auf den Atmega flashen und das wars? keine main.c usw wie bei winavr?

Zum Beitrag von Neutro:

Ich werde mir den Link ebenfalls in Ruhe durcharbeiten, vielen Dank ;)

Ja einfach Flaschen und gut ist es. :-) Wichtig ist allerdings das vor dem Compilieren im Programmkopf auch der (Dein) Prozessor Typ eingetragen ist. Bei copierten Programm wird das gerne übersehen......

Gruß Richard

furiouscars
07.05.2011, 14:24
Zum Beitrag von Richard:

;)

Ok, also falls ich keinen atmega8 sonder atmega32 verwende ?

Noch eine Frage kann ich die Baudrate einfach auf zb. 9600 abändern?

Vielen Dank!

Richard
07.05.2011, 15:47
Zum Beitrag von Richard:

;)

Ok, also falls ich keinen atmega8 sonder atmega32 verwende ?

Noch eine Frage kann ich die Baudrate einfach auf zb. 9600 abändern?

Vielen Dank!

Genau, einfach aus Samples/Chips ein Beispiel laden und die passende .def Datei wählen/Kopieren.
Die Baudrate kann einfach geändert werden wobei es bei internen RC Ozzilator allerdings schnell Timing
Probleme geben kann, besser wäre ein Quarz (Muss aber in den Fuses eingestellt werden). Im Quellcode muss natürlich auch die Tatsächlich von Dir verwendete (Hartware) Takt Frequenz stehen, sonst rechnet der Compiler falsch.

Gruß Richard

furiouscars
08.05.2011, 12:18
@ Richard:

Ok gut, also wenn ich baud auf zb. 9600 einstelle am besten bei dem quarztakt 16mhz eingeben ext quarz an den Atmega mit 2 Tantal 22pF und die Fuses stell ich wie ein? Einfach das fuse ext clock? ändern? Oder is das falsch? ;)

Richard
08.05.2011, 12:57
@ Richard:

Ok gut, also wenn ich baud auf zb. 9600 einstelle am besten bei dem quarztakt 16mhz eingeben ext quarz an den Atmega mit 2 Tantal 22pF und die Fuses stell ich wie ein? Einfach das fuse ext clock? ändern? Oder is das falsch? ;)

Da unterscheiden sich die Programme leider etwas, ich mache das mit AVR Studio 4 dort dann einfach extern higth Frequenz....wählen.

Gruß Richard

furiouscars
08.05.2011, 12:59
Ok danke ;)

Gruß MarC

-schumi-
09.05.2011, 19:14
So, Beispiel is ferdisch ;-)

Hier erst mal ein Tutorial, damit du dich im Quellcode besser zurechtfindest:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
Das ist allerdings unendlich lange und ausführlich und lässt Einsteiger in der Fülle von Informationen "ersaufen"

Desshalb hier die einzelnen Punkte die du dir durchlesen solltest:


Ein Einführungsbeispiel mit Erklärung des Codes: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Einf.C3.BChrungsbeispiel
Sollte warscheinlich schon klar sein: Der Programmablauf (wir nehmen den Sequentiellen Programmablauf) http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Grunds.C3.A4tzlicher_Programmaufbau_eines _.C2.B5C-Programms
Register Allgemein (Nur bis #include <avr/io.h> lesen): http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_Register
WICHTIG! Wie schreibt man in Register: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Schreiben_in_Register
WICHTIG! Verändern von Registern (Das hab ich konkret angewandt) http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Ver.C3.A4ndern_von_Registerinhalten
Brauchst du in diesem Fall nicht unbedingt, aber trotzdem essentiell: Lesen aus Registern :http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Lesen_aus_Registern
WICHTIG! Die Register anhand der Ein/Ausgänge: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports

Im Anhang findest du eine Zip. Darin ist ein Ordner. Den kompierst du einfach 1:1 dahin wo du ihn haben willst (makefile und zusätzliche Sourcecodefiles sind schon alles mit drin und aufeinander abgestimmt)
Der Quellcode findet sich in main.c, UART.c und UART.h, alles Kommentiert. Bei Fragen fragen!

Im Makefile musst du noch auf folgendes achten:


Zeile 08: MCU = atmega32 -> ggf. anpassen
Zeile 11: SRC = $(TARGET).c UART.c -> Das sind die Sourcecodefiles
Zeile 31: CDEFS = -DF_CPU=16000000 -> Hier musst du noch ggf. die Taktfrequenz anpassen

Dann mal viel Erfolg und Spaß beim Rumprobieren und Programmieren!

Gruß
-schumi-

PS: Im Anhang noch ein Bild meines Testaufbaus