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
1. da fehlt eine Menge (Interrupt). 2. Ich denke das Programm empfängt Daten und gibt sie auf PORTD aus. 3. 2 Threads sind wirklich nicht nötig.
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
>andere ansätze hab ich noch nicht gefunden
RTFM (Datenblatt!!!)
soviel wie ich weiß steht da nur in asm und ich möchte das ja in c proggen.
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!
Danke Karl heinz Buchegger, ich hätte es unfreundlicher formuliert. Gute Nacht!
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
okey wusst ich nicht! Dachte das man sich dort auch anmelden muss Entschuldigung. Ja klar werde gern mal bei euch reinschauen:). Mfg
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.
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.