Problem mit dem Verständnis eines programms?!

Gast #1933901
Lesenswert?

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
#1933912
Lesenswert?

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.
#1933958
Lesenswert?

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.
Gast #1933961
Lesenswert?

>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?)
Gast #1933971
Lesenswert?

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
#1933979
Lesenswert?

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.
Gast #1933983
Lesenswert?

@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!
#1933990
Lesenswert?

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.
Gast #1934002
Lesenswert?

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.
#1934019
Lesenswert?

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.
Gast #1934021
Lesenswert?

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.
Gast #1934061
Lesenswert?

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.
#1934288
Lesenswert?

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
Gast #1934304
Lesenswert?

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
#1934386
Lesenswert?

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
Gast #1934422
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren