Hallo. Ich habe noch eine spezielle Frage zum Programmieren in C. Und zwar habe ich schon bestimmt mehr als 20 PDF-Dateien heruntergeladen, aber immer wurde das wichtigste dabei vergessen oder einfach übersprungen. Ich suche ein Tutorial, welches die einfache Ansteuerung eines Port-Pins des Mikrocontrollers ATMEGA8 aufzeigt. Zwar kann ich mit Dev-C++ sehr gut programmieren (wenn es um Ausgabe von Wörtern und Zahlen geht), aber die Ansteuerung eines Mikrocontrollers finde ich nirgends. Mit AVR-Studio habe ich das Problem, dass ich erstmal nicht debuggen kann (habe da eine Möglichkeit mit Baudrate 32600 oder so vorgegeben, kann aber nix ändern. Auch den Com-Port nicht). Zusätzlich erkennt das Programm mein myAVR-Board nicht. Habe schon alle Varianten ausprobiert. Jeder Board-Typ mit automatischer Erkennung des Ports, manueller Einstllung des Ports, USB und weiß ich noch alles - doch das Teil weigert sich mein Board zu erkennen. Außerdem finde ich nirgendwo ein einfaches Tutorial zum Ansteuern eines ATMega (Pins steuern). Einfache Syntax, die stark an Basic anlehnt reicht mir da echt schon. Dieses Zahlen- und Buchstabengewirr von den zusammengefassten Bits verstehe ich nämlich nicht und ohne Anleitung wird das auch nix. Bitte helft mir.Bin am verzwifeln und würde das Board am liebsten in die nächste Ecke schmeißen und aufgeben, weil ich nirgndwo eine verständliche Anleitung finde. Ist doch Mist. Ich will keine Rechenprogramme schreiben, sondern einfach nur erstmal die Ports steuern können... Das wird doch wohl in ein paar Zeilen zu schaffen sein... LG Maik
:
Verschoben durch User
Ich habe den Eindruck, dass Du sehr frustrierte sein musst und deswegen nicht mehr die Konzentration aufbringst einfache Sachen zu regeln. Denn Deine Fragen sind entweder durch einfache Suche zu beantworten oder widersprüchlich: Beim Debuggen spielt irgendwelche Baudrate erstmal nur eine sekundäre Rolle, da entweder via JTAG/DebugWire oder über Simulator). Am besten das Ding mal ein paar Stunden bis Tage beiseitelegen und dann wieder neu anfangen. Mach Dir nichts d'raus. Das geht jedem mal so.
Mit BASIC ist in diesem Forum nicht viel zu finden. Manchmal erbarmt sich jemand und erklärt auch etwas in BASIC, aber die meisten sind da eher auf C oder Assembler getrimmt. Insofern gibt es vielleicht noch anderswo eher Hilfe. In der ganzen Selbstbau-Roboterecke wird vielleicht gelegentlich auch mal etwas mehr mit BASIC gemacht, evtl. findest du dort mehr Hilfe. Generell weiß ich nicht, ob diese Art von Controllern das Richtige ist, wenn du dich nicht so tief herablassen willst, sondern eher den einfachen Weg zu den Pins suchst. Es gibt auch Controller von www.wilke.de. Die sind pro Stück deutlich teurer, aber man braucht ja keine 100 davon. Der Vorteil: - recht komfortabel in BASIC programmierbar - Multitasking einfach zu verwenden - viel Doku und Beispiele - sehr viele Geräte einfach über fertige und funktionierende Treiber ansprechbar - sehr gute Hotline Oder du gehst den harten Weg und befasst dich mit C. Dann gibt es hier ein gutes Tutorial und viel Info...
@C-Heini: Schön - Danke. Soweit war ich auch schon. Ich meine - du kannst nichts dafür, aber diese Anleitung ist so seltsam unübersichtlich, dass ich brechen könnte. Z.B.: Was sollen immer diese drei Punkte? Soll ich die mitschreiben oder wie? Beispiel: #include <avr/io.h> ... //Diese meinte ich int main(void) { Dann: was ist das mit diesen Registern? Was hat es mit den Bitfeldern auf sich - und und und... Das steht da alles nicht. Ich möchte doch nur einen einzelnen popeligen Pin ansteuern - das soll für den Anfang reichen. Was muss denn da geschrieben werden? Reicht denn dieser geschriebene Text aus? #include <avr/io.h> ... #define MEINBIT 2 ... PORTA |= (1 << MEINBIT); /* setzt Bit 2 an PortA auf 1 */ PORTA &= ~(1 << MEINBIT); /* loescht Bit 2 an PortA */ Muss ich denn immer dazu schreiben "<<MEINBIT oder ist das für den Programmablauf unerheblich??? Leider ist ja diese Beschreibung zu den Pins so dermaßen kurz gehalten... Der Autor befasst sich da lieber gleich mit DDRx-Schreibweisen, die ich noch weniger verstehe. Also noch einmal konkret: Reicht der obige Text zum Ansteuern aus? Es ist immer wieder im Text ab dem Punkt mit den kürzeren Schreibweisen die rede von "Registern". Was ist das und muss man die anlegen? Wenn ja - wo und was muss da drin stehen. Vielen Dank und LG Maik
> Reicht denn dieser geschriebene Text aus?
Nochmal: entweder du suchst dir etwas einfacheres, oder du machst
es in C.
Dann musst du aber selber die Grundlagen lernen: ein ordentliches
C-Buch und das Tutorial hier.
Dann ist das mit den Pins auch alles kein Problem mehr, aber ohne
geht es halt nicht.
Nur weil du keine Lust zum Lesen hast, kannst du hier nicht
den 125645. Privatunterricht in Grundlagen haben.
Ich habe nunmehr den Eindruck das Dir nicht nur die Geduld sondern Grundlagen fehlen. Die aber können wir Dir hier nicht ersetzen und Dich so mitten hinein in einen Stand versetzen, ohne Grundlagen die fortgeschritterenen Dinge zu verstehen. Also mein Rat: Noch mal von vorne anfangen.
@ Klaus Wachtler: Danke. Ich möchte ja gern in C programmieren, nur fehlen die richtigen und wirklich Einsteigerfreundlichen Anleitungen. Den ATMega habe ich nunmal - da will ich den auch nutzen. Ist ja ein leistungsfähiger Baustein... (ATMega 8-16PU) Gibt es denn irgendwo eine Auflistung aller Syntax für C??? Am Besten mit Anwendungsbeispielen für I/O-Ports. Das hilft mir schon ungemein weiter. LG Maik
Nun hat ein Mikrocontroller nunmal Register und C eine bestimmte Syntax für Bitmanipulation. Wenn Du also mit beidem arbeiten möchtest (und das schreibst Du ja), wirst Du Dich damit befassen müssen.
@ Huch: Bitte nicht falsch verstehen aber ich finde Dein Kommentar echt witzig. Ich BIN am Anfang aller Grundlagen - und deswegen bin ich ja hier. Habe zwar ein paar PDF für allgemeine Grundlagen gefunden, diese beziehen sich aber NICHT auf die Programmierung von Controllern, sondern auf die Programmierung von Programmen unter Windows und Linux. Nützt mir also echt herzlich wenig. Was ich brauche ist der perfekte Einstieg. Und dazu finde ich auch keine Literatur. Kannst du mir da was empfehlen oder mir eine Seite nennen, wo das behandelt wird? Ist wirklich extrem wichtig. Ich möchte das größtenteils aus eigenen Kräften schaffen... LG Maik
Maik Schulze schrieb: > Danke. Ich möchte ja gern in C programmieren, nur fehlen die richtigen > und wirklich Einsteigerfreundlichen Anleitungen. Den ATMega habe ich > nunmal - da will ich den auch nutzen. Ist ja ein leistungsfähiger > Baustein... (ATMega 8-16PU) Du musst zwei Dinge lernen, auch weenn es dir wahrscheinlich nicht gefällt: 1. C 2. AVR mit C Du wirst kein vernünftiges Buch finden, in dem beides auf einmal abgehandelt wird. C alleine ist komplex genug, und vor allem auf einem PC wesentlich einfacher zu lernen als mit einem Controller. Deshalb rate ich dringend dazu, mit C auf einem PC anzufangen und dann erst mit dem AVR weiter zu machen. Mit ordentlichen C-Grundlagen ist das Tutorial hier eine feine Sache. > > Gibt es denn irgendwo eine Auflistung aller Syntax für C??? Am Besten > mit Anwendungsbeispielen für I/O-Ports. Wie gesagt: C in einem C-Buch, AVR hier. (Langsam überlege ich schon, mal C+AVR in eionem Aufwasch als Kurs o.ä. zu machen. Dann aber nicht mehr kostenlos...)
@HC Zimmerer: Und wo finde ich ein entsprechendes Tuto, wo alles behandelt wird? Es muss ja einen Zusammenhang geben. Wo wird was eingetragen bzw. wo muss was eingetragen werden? LG Maik
C-Einsteigerbücher habe ich 2 Stück. Dann werde ich mal trockenen Stoff abarbeiten. Ich hoffe, dass ich dadurch weiter komme. Immerhin kann ich schonmal ein kleines Rechenprogramm schreiben - wenigstens ein Anfang...
>Habe zwar ein paar PDF für allgemeine Grundlagen gefunden, diese
beziehen sich aber NICHT auf die Programmierung von Controllern, sondern
auf die Programmierung von Programmen unter Windows und Linux.
Dann hast Du falsch gesucht. Texte über die Grundlagen der Sprache C
beziehen sich nicht auf eine bestimmte Hardware, sonst sind es nämlich
keine Texte über Grundlagen.
Das Problem ist, das Du die Dir vorliegenden Texte leider weder nennst
(mit Link) oder differenziert beschreibst was an einem konkreten Text
Dir welche Schwierigkeiten macht.
Dahe haben wir keine andere Grundlage Dir einen anderen Text zu
empfehlen als das er eben existiert. Dafür reicht aber google und
Konsorten.
Ehrlich gesagt, empfinde ich Deine ganze Attitüde als ein wenig
hysterisch. (Das soll nur eine Qualifikation und keine Herabsetzung
sein). Mach mal was anderes. Schraub' am Auto oder wasch ab oder lies
Deiner Frau was vor. Und in ein paar Tagen kannst Du das Ganze schon
etwas ruhiger und überlegter angehen.
Was du von den C-Grundlagen können solltest: - Zeiger - Zeiger - Zeiger - Felder - Strings - Zeiger+Felder+Strings - Wertsemantik, Referenzsemantik - Schleifen, Fallunterscheidungen - Modularisierung, Headerdateien - Operatoren, auch und besonders die für Binärarithmetik (binäres UND, OR, Negierung, XOR...) - ach ja: und Zeiger natürlich Dateien (low level IO mit int-file descriptor ebenso wie FILE*) helfen dir auf einem Controller nicht viel, auf PCs natürlich schon.
Klaus Wachtler schrieb: > - Zeiger, Zeiger, Zeiger, Zeiger+Felder+Strings und Zeiger natürlich Huch (Gast) schrieb: > Und dann würde ich noch Zeiger vorschlagen. Die sind wichtig! :-) Man sollte die Wichtigkeit von Zeigern für einen Einsteiger der Controller programmieren möchte nicht überbewerten. Ich würde Bitmanipulation als wesentlich wichtiger erachten. Wenn er auf dem Controller so weit ist daß er Zeiger braucht kann er sich das Problemlos selbst anlesen ;-) Gruß f PS: Ihr habt Zeiger auf Funktionen vergessen. :)
Mal wieder viele Besserwisser, arrogante C++ Programmierer oder solche, die dies vorgeben. Es schreibt einer: "Ich will C++ lernen" Antwort: "Dann must du C lernen" Und das selbe mehrmals - komisch! Dann werden noch die Fähigkeiten des Fragenden in Frage gestellt, aber er will doch lernen! Nach dem Lesen der bisherigen Beiträge fällt mir auf, dass wohl keiner der bisherigen Schreiber die Fähigkeit besitzt in deutlich weniger Zeilen als die bisherigen Kommentare umfassen, dem Fragenden eine geeignete Antwort zu geben. Ich habe erkannt, wer noch viel lernen muss! Joe
Joe schrieb: > Antwort: "Dann must du C lernen" > > Und das selbe mehrmals - komisch! Vielleicht weil C++ (zumindest das, was man klassischerweise unter C++ versteht) für einen AVR gar nicht geeignet ist? Abgesehen davon, daß er gar nicht unbedingt C++ machen will, sondern auch mit BASIC etc. vorlieb nehmen würde, Hauptsache einfach. Es steht dir natürlich frei, einen anderen guten Ratschlag zu geben. Außer Gemecker und den Vorwurf von Arroganz kann ich das jetzt aber bei deinem Beitrag nicht so recht erkennen.
Maik Schulze schrieb: >> Zwar kann ich mit Dev-C++ sehr gut programmieren... > Z.B.: Was sollen immer diese drei Punkte? Soll ich die mitschreiben oder > wie? > Beispiel: > > #include <avr/io.h> > > ... //Diese meinte ich > > int main(void) > { ... ist ein Hinweis, dass an dieser Stelle statt ... weitere C-Anweisungen stehen können oder stehen müssen. Wenige hier schreiben als Antwort auf Fragen komplette Programme. Meistens wird der grundsätzliche Weg gezeigt und es ist Aufgabe des Fragenden die Grundlösung zu ergänzen. > Dann: was ist das mit diesen Registern? Steht im Datenblatt des Atmega8. > Was hat es mit den Bitfeldern > auf sich - und und und... Das steht da alles nicht. ^^^ grinz Bitfelder => Bitmanipulation > Ich möchte doch nur einen einzelnen popeligen Pin ansteuern - das soll > für den Anfang reichen. Was muss denn da geschrieben werden? > > Reicht denn dieser geschriebene Text aus? > > #include <avr/io.h> > ... > #define MEINBIT 2 > ... > PORTA |= (1 << MEINBIT); /* setzt Bit 2 an PortA auf 1 */ > PORTA &= ~(1 << MEINBIT); /* loescht Bit 2 an PortA */ Nein. Das sit kein legales C-Programm. Es fehlen wesentliche Teile wie z.B. main() Wenn PORTA2 ein gültiger I/O-Pin am Atmega8 ist (=> Datenblatt), ist der Teil oben bereits richtig. Es fehlt noch die Einstellung über das DDRA Register, dass der Pin ein Ausgabepin sein soll. Frisch nach dem RESET ist er nämlich ein Eingangspin. > Muss ich denn immer dazu schreiben "<<MEINBIT oder ist das für den > Programmablauf unerheblich??? Viele Wege führen nach Rom. Diese Schreibweise ist eine gängige Konvention, weil sie relativ gut von Menschen interpretierbar ist. Bitfelder => Bitmanipulation > Leider ist ja diese Beschreibung zu den Pins so dermaßen kurz > gehalten... Der Autor befasst sich da lieber gleich mit > DDRx-Schreibweisen, die ich noch weniger verstehe. Immer im Datenblatt nachvollziehen, was gemacht wird. Was im Datenblatt steht muss ja sollte im Quellcode nicht wiederholt werden. > Also noch einmal konkret: Reicht der obige Text zum Ansteuern aus? Nein, > Es > ist immer wieder im Text ab dem Punkt mit den kürzeren Schreibweisen die > rede von "Registern". > Was ist das und muss man die anlegen? Wenn ja - wo > und was muss da drin stehen. Häh? Wo wie was?
Joe schrieb: > Mal wieder viele Besserwisser, arrogante C++ Programmierer oder solche, > die dies vorgeben. Und zu welcher Gruppe gehörst du? > Es schreibt einer: "Ich will C++ lernen" > > Antwort: "Dann must du C lernen" > > Und das selbe mehrmals - komisch! Auch wenns nichts mit der Fragestellung zu tun hat, meiner Meinung nach sind für jemanden der C++ lernen will C Kentnisse eher hinderlich. > Dann werden noch die Fähigkeiten des Fragenden in Frage gestellt, aber > er will doch lernen! Was willst du machen, manche haben eben die nötigen Denkstrukturen, manche müssen sie erlernen. Nur aus dem Verhalten des OP geht hervor das er eher das Handtuch wirft als sich Systematisch einzuarbeiten; also warum ihm nicht den Frust ersparen? Programmieren hat auch was mit Organisation, Eigeninitiative und Durchhaltevermögen zu tun. > Nach dem Lesen der bisherigen Beiträge fällt mir auf, dass wohl keiner > der bisherigen Schreiber die Fähigkeit besitzt in deutlich weniger > Zeilen als die bisherigen Kommentare umfassen, dem Fragenden eine > geeignete Antwort zu geben. > Ich habe erkannt, wer noch viel lernen muss! Schön. Aber für den Fall das nicht jeder unter "wer" fällt, würde ich dir empfehlen nochmal drüber nachzudenken...
Auch wenns eventuell schädlich ist, hier das vollständige popelige Beispiel zum Bit ansteuern:
1 | #include <avr/io.h> |
2 | |
3 | #define MEINBIT 2
|
4 | |
5 | int main( void ) { |
6 | |
7 | // Initialisierungen
|
8 | DDRB = 0xFF; // Alle Pins von Port B auf Ausgang |
9 | PORTB = 0x00; // Alle PINS von PORTB auf low |
10 | |
11 | // Endlosschleife
|
12 | while( 1 ) { |
13 | PORTB |= ( 1 << MEINBIT ); // Hiermit wird PB2 auf high gesetzt |
14 | PORTB &= ~( 1 << MEINBIT ); // Hiermit wird PB2 auf low gesetzt |
15 | };
|
16 | |
17 | return 0; // Formhalber der Rückgabewert für main, obwohl nie erreicht. |
18 | }
|
Trotzdem wirst du das Blinken nicht sehen können weils einfach zu schnell geht. Zum Verständnis würde ich mich als erstes mal mit dem Shift Operator bzw. generell bitweisen Operatoren vertraut machen. Als Quelle sei einfach mal das AVR-GCC-Tutorial hier genannt, wo auch direkt eine Erklärung zum Shift steht: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Ausg.C3.A4nge
Frank Lorenzen schrieb: > Man sollte die Wichtigkeit von Zeigern für einen Einsteiger der > Controller programmieren möchte nicht überbewerten. > Ich würde Bitmanipulation als wesentlich wichtiger erachten. Sehe ich ähnlich, Zeiger gehören bei mir auf dem µC eher zu den selteneren Gästen. Ausser für (String-)Arrays die naturgemäß per Zeiger übergeben werden gehört hier call by reference meiner Meinung nach zu den Ausnahmen. Und bislang bin ich auf 8 Bit µC auch ganz gut ohne dynamische Speicherverwaltung ausgekommen. > Wenn er auf dem Controller so weit ist daß er Zeiger braucht kann er > sich das Problemlos selbst anlesen ;-) Das kann man sich eigentlich aufheben bis es sich zwangsläufig aus der Aufgabe ergibt und/oder es in ähnlichen Beispielen als zweckmäßig erweist. > PS: Ihr habt Zeiger auf Funktionen vergessen. :) Für manche Menschen ist es eventuell besser wenn manche Türen für immer geschlossen bleiben gotos, voidpointer, etc.; auch wenn sie für andere sehr nützlich sind.
Hi, ich kritisiere hier mal alle Beteiligten: erst den Frager, der unbedingt auf C beharrt (Programmieren kann man auch in Bascom, und dort lernen wie man Pins sprachunabhängig ansteuert). und natürlich die C Freaks. C ist mächtig und gebräuchlich. Soweit so gut. Die Sprache hat aber eine Scheißsyntax und ist darum mM zum Einsteigen nicht das wahre. Gruß Achim
>und natürlich die C Freaks. C ist mächtig und gebräuchlich. Soweit so >gut. Die Sprache hat aber eine Scheißsyntax und ist darum mM zum >Einsteigen nicht das wahre. Mag zwar richtig sein, aber wie schon oben gesagt wurde, wird es zu BASIC kaum hier jemanden geben, der helfen kann. Vielleicht das hier als C-Einstieg: http://openbook.galileocomputing.de/c_von_a_bis_z/ Und was die Verbindung mit AVR angeht -> das schon genannte AVR-Tutorial + Datenblatt des µC
Etrick schrieb: > ich kritisiere hier mal alle Beteiligten: > > erst den Frager, der unbedingt auf C beharrt (Programmieren kann man > auch in Bascom, und dort lernen wie man Pins sprachunabhängig > ansteuert). stimmt nicht: Maik Schulze schrieb: > Einfache Syntax, die stark an Basic anlehnt > reicht mir da echt schon. Das würde ich jetzt schon als offen für Alternativen bezeichnen, wenn ich ihn nicht falsch verstanden habe. Etrick schrieb: > > und natürlich die C Freaks. C ist mächtig und gebräuchlich. Soweit so > gut. Die Sprache hat aber eine Scheißsyntax und ist darum mM zum > Einsteigen nicht das wahre. Man hat ihm auch anderes nahegelegt: Klaus Wachtler schrieb: > Es gibt auch Controller von www.wilke.de. Klaus Wachtler schrieb: > Insofern gibt es vielleicht noch anderswo eher Hilfe. Apropos Kritik: Kam von dir ein besserer Rat als die hier gemachten?
Etrick schrieb: > und natürlich die C Freaks. C ist mächtig und gebräuchlich. Soweit so > gut. Die Sprache hat aber eine Scheißsyntax und ist darum mM zum > Einsteigen nicht das wahre. Um mal haku zu zitieren: Was ist eigentlich nichtssagender? "Dim x&, y$, z%" oder "long x, char *y, int z"? Soviel zum Thema "Scheißsyntax" oder hast du irgend ein Beispiel um deine Aussage zu belegen? Ich kenne durchaus Sachen die ich an C anders gemacht hätte, aber mit Sicherheit nicht in Richtung Basic.
Jens G. schrieb: > Mag zwar richtig sein, aber wie schon oben gesagt wurde, wird es zu > BASIC kaum hier jemanden geben, der helfen kann. Das sehe ich nicht so. Es gibt hier im Forum genug kompetente User, die selbst BASCOM einsetzte und auch helfen. Die Wahrscheinlichkeit ist jedoch gering, die in einem Thread zu treffen, der als Betreff "Programmierung in C" hat.
Hallo Maik Schulze, lass Dich nicht unterkriegen. Alle die hier laut Rumschreien kochen auch nur mit Wasser. Als erstes musst in diesem Forum lernen die gegebenen Antworten zu selektieren. In vielen Antworten steht einfach nur Blödsinn. Der nächste Weg ist, besorge Dir mal ein, zwei Bücher über C-Programmierung und AVR-Controller, dann wird manches einfacher. Speziell für die Programmierung in C und AVR empfehle ich Dir das Buch "Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie" aus dem Oldenbourg-Verlag ISBN 978-3-486-58790-6. Hier werden speziell alle Probleme mit MC in Verbindung mit C ausführlich behandelt. Dann noch ein spezielles Buch zur reinen C-Programmierung von Jürgen Wolf "C von A bis Z" inclusiv einer Referenzkarte für C-Befehle. Hier noch die ISBN 978-3-8362-1411-7. Gibt sicherlich noch weit mehr gute Bücher ..ich habe mich halt für diese Exemplare entschieden und komme gut zurecht. Wie Du siehst, gibt es doch vernünfitige Bücher in Sachen C und AVR. Hier wird das Gegenteil behauptet ...ein Beispiel fürs Selektieren der vorhandenen Antworten. Als Programmierplattform benutze ich aussschliesslich das AVR-Studio und teste meine Software auch dort per Simulation bis 90% fertig aus. Ist am Anfang nicht ganz einfach sich in die Geschichte dort reinzudenken, aber mit der Zeit wirst die Software nicht missen wollen. Sie ist sehr leistungsfähig und erfüllt ihren Zweck 100% ....so meine Meinung. Wenn in Basic programmieren willst, kuck mal bei Roboterleuten vorbei, die arbeiten sehr oft mit Basic. Also lass den Kopf nicht hängen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.