Nabend,
Ich habe einen PIC16F887 und möchte den integrierten AD Wandler
benutzen.
So nun habe ich ein wenig im inet gestöbert und ein Quellcode gefunden.
Allerdings versteh ich nicht ganz was das Programm macht.
Code:
void main()
{
unsigned char buf;
/*CLK*/
IRCF = 1;
IRCF0 << 0;
HTS << 1;
LTS << 0;
SCS << 1;
//---------
buf = 0xff;
TRISA0 << 1;
TRISD = 0;
ANS0 << 1;
ADCS1 << 0;
ADCS0 << 1;
VCFG1 << 0;
VCFG0 << 0;
CHS3 << 0;
CHS2 << 0;
CHS1 << 0;
CHS0 << 0;
ADFM << 0;
ADON << 1;
__delay_us(1);
ADRESH = 0;
PORTD = 0x11;
while(1)
{
PORTD = 0x01;
__delay_us(5);
GODONE = 1;
//__delay_us(5);
while(GODONE == 1);
buf = ADRESH;
PORTD = buf;
}
}
Das der PortD als Ausgang defeniert ist und PORTA.0 ist Eingang das weiß
ich schonmal^^.
So nun versteh ich nicht was der rest so alles bedeutet und macht /
verursacht?!
Ich bin noch relativ neu und tu mich noch ein wenig schwer damit!
Wäre nett wenn ihr mir helft :)
Mfg
HansWurst schrieb:> So nun habe ich ein wenig im inet gestöbert und ein Quellcode gefunden.
Wo hast du das her?
> Allerdings versteh ich nicht ganz was das Programm macht.
Im wesentlichen setzt es haufenweise irgendwelche Konfigurationsbits in
irgendwelchen Registern. Was es damit aufsich hat, findest du im
Datenblatt des Prozessors.
Allerdings:
> ADCS1 << 0;> ADCS0 << 1;> VCFG1 << 0;> VCFG0 << 0;> CHS3 << 0;> CHS2 << 0;> CHS1 << 0;
....
war das ein C++ Programm? Denn in C sind das IMHO lauter 0-Operationen,
d.h. sie bewirken gar nichts. Ich kann mir nicht vorstellen, wie man in
C ADCS1 definieren könnte, dass ADCS1 << 0 irgendetwas sinnvolles macht.
Ausser es handelt sich um eine Spezialsyntax dieses Compilers selbst
verständlich. Aber nur mit Standard-C und Anwendung der dortigen Regeln
sind das keine sinnvollen Operationen.
hier:
http://www.fernando-heitor.de/index.php/forum/index.php/topic,4075.msg20804/
Kann man das auch iwie verständlicher schreiben? Weil is sehr doof, hab
noch net so die Ahnung, hab aber auf Arbeit die Aufgabe bekommen und
muss mich da rein arbeiten und andere ansätze hab ich noch nicht
gefunden bzw. weiß ich nicht wie ich das sonst verwirklichen kann.
Mfg
Dieses "Programm" hat jemand geschrieben, der nicht programmieren kann.
Es ist funktionslos, weil jede "Anweisung", in der der Shift-Operator <<
auftaucht, funktionslos ist.
Vergiss das Beispiel, daran kann man nur lernen, wie man es nicht macht.
HansWurst schrieb:> soviel wie ich weiß steht da nur in asm und ich möchte das ja in c> proggen.
Dann solltest du wenigstens soweit sein und den Rest des von dir
verlinkten Threads lesen! Dort steht nämlich, dass die ganzen << Unsinn
sind und wie sie zu ersetzen sind.
Zur Sache:
Das spielt keine Rolle.
Im Datenblatt steht zb, dass du das Bit XYZ (Name von mir erfunden) auf
1 setzen musst, um beim ADC den Vorverstärker auf eine Verstärkung von 2
einzustellen.
Ob du das dann in Assembler mit ein paar Anweisungen schreibst, die so
im Datenblatt stehen, oder ob du das in C als
XYZ = 1;
schreibst, ist von der Sache her egal. Den der entscheidende Punkt ist,
dass XYZ auf 1 gesetzt werden muss, wenn du besagten Verstäker
einschalten willst. Das Einschalten verursacht etwas und nicht wie man
es dann in der jeweiligen Programmiersprache schreibt.
Und die Beschreibung dessen, was jedes einzelne Bit macht, die findest
du im Datenblatt. Besser als dort kann dir das hier auch keiner
beschreiben. Und vor allen Dingen nicht vollständiger.
>soviel wie ich weiß steht da nur in asm und ich möchte das ja in c>proggen.
Oh, meine Fresse!!! Im Datenblatt steht wie der ADC funktioniert, welche
Bits in welchen Registern was machen und wann in welcher Reihenfolge
gesetzt werden müssen, wo das Ergebnis steht usw. Wie man in C Bits in
einem Register setzt usw. steht da natürlich nicht, das hat nichts mit
dem PIC zu tun. Dafür gibts Tutorials. Im übrigen dürftest du nicht der
erste sein der den ADC nutzen will, Google kann sicherlich auch da
helfen.
Sacht mal, gibt es noch Leute die nicht für jede Kleinigkeit sofort
das Forum zuspammen sondern mal selber suchen und nachdenken? (und ggf.
vernünftig schreiben?)
okey das is doof mh dann muss ich wohl weiter suchen. Ich hae keine
Ahnung wie das machen soll weil bin noch sehr neu und ja naja hab nen
großes Projekt und das ist ein Teil davon. Naja ich hoffe ihr könnt mir
ratschläge geben wie man das machen kann das es ansatzweise die funktion
hat das man einen analogen Wert einlist und digital über erstmal LEDs
ausgibt.
Gruss
HansWurst schrieb:> okey das is doof mh dann muss ich wohl weiter suchen.
Nein.
Du musst lernen!
Und du musst das Datenblatt studieren!
Und du musst ein C Buch lesen und durcharbeiten!
(Sinnvollerweise fängst du mit dem C-Buch an um dir erst mal Grundlagen
in C anzueignen)
> Ich hae keine> Ahnung wie das machen soll
Ja das wissen wir schon
> weil bin noch sehr neu
Auch das wissen wir.
Aber das istz keine Entschuldigung dafür, dass du deine Hausaufgaben
nicht machst.
> und ja naja hab nen> großes Projekt und das ist ein Teil davon.
Na Prost Mahlzeit.
Mit dem was du bisher gezeigt hast, wäre es besser, auch für deinen
Auftraggeber, wenn du das Projekt abgeben könntest. Denn das wird
nichts. Und so wie du dich anstellst, wird es auch die nächsten 2 Monate
nichts.
Programmieren ist nicht etwas, was man in 3 Tagen lernen kann.
@Bastel: Bleib mal ganz ruhig! Sy das ich nicht so all wissend bin wie
du es bist! Ich bin ein Anfänger und ich belese mich schon die ganze
Zeit. Weiß aber noch nicht wie ich das machen muss hab zwar befehele
aber ka wie verkünpfen etc. dafür is nen Forum da um sich "Hilfe" zu
suchen!
HansWurst schrieb:> @Bastel: Bleib mal ganz ruhig! Sy das ich nicht so all wissend bin wie> du es bist! Ich bin ein Anfänger und ich belese mich schon die ganze> Zeit. Weiß aber noch nicht wie ich das machen muss hab zwar befehele> aber ka wie verkünpfen etc. dafür is nen Forum da um sich "Hilfe" zu> suchen!
Ein Forum ist hauptsächlich dazu da (zumindest versteht sich dieses
Forum hier so), um Details abzuklären. Ab und zu auch mal eine
grundlegende Technik erklären.
Aber dazu muss ein Grundstock da sein!
Und den vermisst man bei dir schmerzlich. Da ist so gar nichts da,
worauf man aufbauen könnte.
>dafür is nen Forum da um sich "Hilfe" zu>suchen!
Sicher, aber nicht von jetzt auf sofort ein
perfekter Programmierer zu werden. Das braucht seine Zeit.
Ja kommt ey was isn das fürn f*** Forum ey -.-
ich bearbeitet das C Programmier Buch und Datenblätter studiere ich
auch.
Aber wenn ich nen Projekt bekomme und da noch nicht so bewachsen bin
dann steht man numa vor ner riesen wand! Ich probiere ja shcon viel rum
und versuche es ohne Hilfe hin zu bekommen, was bislang leider noch
keine großen erfolge gebracht hat, außer das ich einige Befehle lerne
und versuche diese speziell nach dem Projekt an zu reihen.
Aber hat ja kein zweck!
Wenn ich das alles wüsste bräucht ich nicht hier schreiben! Will ja nur
denkanstöße bekommen und keine kompletten Progrgramme.
Das war das letzte mal das ich hier in das Forum schreibe weil ich hab
es satt das man als Anfänger gleich runter gemacht wird, das man seine
hausaufgaben nicht macht oder sonst was. Ich programmiere und lese die
letzten tage seh viel um die befehele langsam drauf zu bekommen aber das
macht aus mir nicht gleich nen Programmierer.
HansWurst schrieb:> Aber wenn ich nen Projekt bekomme und da noch nicht so bewachsen bin
Entschuldige.
Aber zu erkennen, dass
ADCFG << 0;
so rein gar nichts macht, dazu muss man nicht bewachsen sein. Dazu muss
man nur seine Hausaufgaben in der C Programmierung gemacht haben.
> Wenn ich das alles wüsste bräucht ich nicht hier schreiben! Will ja nur> denkanstöße bekommen
Der Denkanstoss ist:
Du musst systematisch vorgehen. Vom Einfachen zum Schwierigeren. Du
musst viel Üben. Von Anfang an. Mit den ganz einfachen Dingen. Du kannst
eine LED zum Leuchten bringen? Gut. Dann mach Lauflichter bis zur
Vergasung. Wie kriegst du es hin ein Muster umlaufen zu lassen, wie
funktioniert das auf Bitebene. Schleifen, etc. das darf alles keine
Probleme machen. Eine Bitsetzsyntax musst du ohne groß nachzudenken
erkennen können wenn du sie siehst.
> Das war das letzte mal das ich hier in das Forum schreibe weil ich hab> es satt das man als Anfänger gleich runter gemacht wird,
Du wirst nicht runtergemacht weil du Anfänger bist.
Du wirst runtergemacht, weil du offenbar in der Vorstellungswelt lebst,
dass du nur zuhören musst um programmieren zu lernen. Wenn du von heute
Nachmittag bis jetzt kein einziges mal auf den Gedanken gekommen bist,
ins Datenblatt zu schauen und nachzulesen, was es über diese Wörter wie
ADCS1, ADCS0 und wie sie noch alle heißen, zu berichten weißt, dann
fehlt da einfach von deiner Seite etwas Eigeninitiative. Du magst bisher
daran gewöhnt sein, dass dir immer jemand alles bis ins kleinste
vorkaut, aber wenn du programmieren willst, dann ist es damit vorbei.
Programmieren ist wie Radfahren lernen. Man muss es tun und nicht nur
darüber lesen oder zusehen! Wenn man hinfällt, dann heißt es aufstehen
und noch einmal, anders, probieren.
Das das alles am Anfang viel auf einmal ist, das wissen wir schon.
Das ist uns auch nicht anders ergangen als dir.
Und genau darum ist es so wichtig, dass die Grundlagen sitzen. Wenn du
uns das Ursprungsprogramm so wie du es hast präsentierst, dann muss ich
mich auf den Kopf greifen und mich fragen: Ja wo hat der denn seine
C-Grundlagen gelernt. Und das hat erst mal gar nichts damit zu tun, was
denn da alles eingestellt und eingeschaltet wird.
OK, also doch.
> @Bastel: Bleib mal ganz ruhig! Sy das ich nicht so all wissend bin wie> du es bist!
Ich bin überhaupt nicht "allwissend". Aber ich hab im Unterricht /
Studium aufgepasst, hab für ein Projekt ein, zwei mal bis nachts um 2
vor MPLAB und Co. gesessen, hab Datenblätter, Spezifikationen,
Compilermanuals(!), Tutorials und so weiter gelesen (obwohl mein
Englisch miserabel ist), hab gegoogelt, überlegt und probiert bis es
funktioniert hat und ich es verstanden hatte. Nicht einfach wie andere
Studenten Code von irgendwo kopiert und als meinen Eigenen ausgegeben.
Du hast keine Ahnung von Nichts, suchst dir das nächstbeste Forum (aha,
Google kannst du also bedienen, ist ja schon mal etwas), schmiert
lieblos eine Anfrage hin, natürlich im passenden Jargon (^^ eih alder
voll kraßs ey wa?) wie es sich für einen coolen Jugendlichen gehört,
verschweigst natürlich das du das eigentlich selber können müsstest und
erwartest das dir jemand Quellcode + Doku frei Haus liefert, am besten
bis gestern. Ne Freundchen, so läuft das nicht!
> Ich bin ein Anfänger und ich belese mich schon die ganze Zeit
Ich will es nicht eskalieren lassen, deshalb nutze ich diese
Steilvorlage jetzt nicht (und ich habe Mühe mich zurückzuhalten!).
>dafür is nen Forum da um sich "Hilfe" zu suchen!
Wenn man sich mit den Grundlagen beschäftigt hat und diese
beherrscht(!), die Datenblätter gelesen und verstanden sind, man u.U.
einen Blick ins Handbuch vom Compiler geworfen hat, auf der
Herstellerseite nach Application Notes und Ähnlichem gesucht hat, Google
gefragt, über das Problem nachgedacht hat und diverse Möglichkeiten
selbstständig ausprobiert hat, die Forensuche benutzt und ähnliche
Postings gelesen hat, die darin enthaltenen Informationen umgesetzt hat,
wenn es dann immer noch nicht klappt erstellt man ein neues Posting.
Dabei ist man höfflich, schreibt vernünftig, gibt so viele Informationen
wie möglich (µP, Compiler, was hat man schon probiert, was genau ist das
Problem usw.), strukturiert diese vernünftig, hängt einen möglichst
kurzen Quellcode an welcher das Problem erzeugt (Minimalbeispiel) und
bittet freundlich um Hilfe. Was du hier machst habe ich oben
beschrieben.
Rhaaa, warum schreib das überhaupt??? Reine Zeitverschwendung, eig.
wollte ich ins Bett.
@Moderatoren
Verzeihung, irgendwann platzt auch mir der Kragen.
Ja ich stele vlt die Fragen falsch sodas es rüber kommt als will ich
alles hier auf meinen tisch hingelegt bekommen ohne mir iwelche gedanken
oder mühen zu machen. Das stimmt nicht. Ich bin derzeit in der
Ausbildung und ich habe noch nie mit C Programmiert (ganz ganz kurz ins
asm rein geschnuppert, was in mir das interesse geweckt hat) und
studieren tu ich auch nicht das ich das dort gelehrt bekomme.
Ich habe mich entschieden das zu lernen und ich habe nix außer ein Buch
und ein paar tuts ausm netz.
So jetz versuch ich mir alles iwie zusammen zu reihmen und zu verstehen
was da alles geschrieben ist. Ich habe auch schon einige standart
Befehle drauf. Ich habe auch schon LEDs zum leuchten gebracht, zum
blinken, nen Lauflicht habe ich auch gemacht . Aber für mehr reicht es
leider nicht! Ich habe dieses Projekt angenommen um mehr über C zu
lernen.
Und das ich mir seit heute nachmittag noch nicht ins datenblatt geschaut
habe was das alles so bedeutet, liegt daran das ich auf Arbeit auch noch
andere dinge zu tun habe und danach auch noch training und erst am abend
nach hause komme.
aber egal ich werde euch mit meinen Fragen in ruhe lassen und versuchen
mir das selber bei zu bringen.
@HansWurst
Vielleicht hilft Dir mein Video-Tutorial zum Thema
"Mikrocontrollerprogrammierung in C".
Der ist zwar für absolute Anfänger gedacht, aber Du kannst ie ersten
Folgen ja überspringen, wenn Du möchtest.
http://et-tutorials.de/mikrocontroller/
Hallo HansWurst,
(sorry, aber den Nick hast Du dir selber gegeben)
HansWurst schrieb:> aber egal ich werde euch mit meinen Fragen in ruhe lassen und versuchen> mir das selber bei zu bringen.
sei mal nicht gleich beleidigt. Warum hast du eigentlich nicht in dem
Forum gefragt, wo du den Quelltext kopiert hast? Ich weiss, es ist nicht
so stark frequentiert wie dieses hier, aber wenn du dich schon dort
bedienst wäre es sicher angebracht dort mal aufzukreuzen mit deinen
Fragen. (erspart auch die immer wiederkehrenden Hinweise auf AVR, da wir
ein spezielles PIC-Forum sind)
Grüße,
Edson
Hallo,
erstmal schönen dank Wolfgang Bengfort.
Ganz einfach aus dem Grund, weil ich mich nicht über all anmelden möchte
und ich in diesem Forum hier eine gute chance gesehen habe das mir
geholfen wird.
Mfg
HansWurst schrieb:> Ganz einfach aus dem Grund, weil ich mich nicht über all anmelden möchte> und ich in diesem Forum hier eine gute chance gesehen habe das mir> geholfen wird.
Weder hier im Mikrocontroller.net noch bei Fernando-Heitor.de besteht
eine Anmeldepflicht. Aber du brauchst dich nicht zu rechtfertigen,
wollte dich nur einladen auch bei uns mal reinzuschauen.
Grüße,
Edson
Hinweis am Rande: Dies ist zwar ein Forum, ich bitte aber dennoch um
korrekte Rechtschreibung! Bitte beachten Sie v.a. den Unterschied
zwischen "dass" und "das". Personen, die sich nicht an die
Rechtschreibung halten, disqualifizieren sich bereits selbst in gewisser
Weise - denn ein guter Ingenieur hat auch auf seine Ausdrucksweisen zu
achten.