Hi, ich habe ein Programm zur Anzeige von diversen Fahrzeugsensoren geschrieben (siehe anhang) nun hab ich das Problem das mir das Teil nur MÜLL auf dem Display ausgibt... wenn ich z.B. den AD Channel 0 auf masse lege und diesen anzeige (wie momentan codiert) dann bekomme ich 582 angezeigt was ja wohl irgendwie net sein kann... normal sollte ein unsigned char doch garkein 582 enthalten können oder?! Bitte helft mir ich bin echt am verzweifeln... Gruß Malte.
Warum er da 582 anzeigt, finde ich auf die Schnelle auch nicht. Nur paar kleine Anmerkungen: strcat(s, "") ist ein NOP. Der gcc erkennt den aber und optimiert das klaglos weg, aber das ist sicher nicht das, was Du wolltest. :-) Das (auskommentierte) Gewurschtel mit asm("ror") ist nicht nötig. unsigned int getadc(void) { unsigned int adc; adc = ADCW; return adc / 4; } Das da tut genau dasselbe, nur halt in C statt in Assembler. ;-) Du schaltest ADIE ein, ohne einen Interruptvektor dafür zu haben. Wehe dem, wenn Du jetzt noch ein sei() irgendwo hast... :) Allgemein sind die inp()/outp()/sbi()/cbi() Makros auf dem Weg der Abkündigung. Benutze die einfachere direkte Zuweisung wie eben gezeigt, vor allem halt für neuen Code. Bezüglich Deines eigentlichen Problems, ich würde vermutlich erstmal versuchen, das mit einer UART-Ausgabe ein bißchen zu debuggen. Da kann man mehr an Informationen unterbringen, die man dann in einem Terminalprogramm verfolgt. Ein bißchen Platz wirst Du ja hoffentlich noch haben. Wenn Du genügend Platz hast, kannste natürlich auch noch printf() benutzen, das macht die Sache programmiererfreundlicher.
Was mir beim kurzen durchschauen noch aufgefallen ist: der String für die (auskommentierte) Kilometeranzeige ist etwas zu kurz. 3-stellige Zahl + " kmh" + '\0' macht 8 Bytes.
Danke erstmal für eure Hilfe, das durch das viele auskommentieren nicht mehr alles perfekt ist ist mir schon klar, ich hab halt aus lauter verzweiflung erstmal versucht den Fehler einzugrenzen... Könnte mir vieleicht jemand auf die schnelle ein kleines Beispiel basteln, wie ich bei dem Tiny26 den AD Wandler abfrage?! so mit anständiger initialisierung, auslesen usw... weil joerg ja sagte das ich keinen Interruptvector habe... was muß dieser tun?! Ein kleines beispiel währe halt am sinnvollsten. PS: das mit dem asm(ror) hab ich deshlab gemacht weil ich ja nur einen 8 Bit AD Wandler brauche und so hatte ich das damals in ASM gelöst und hatte keinen plan wie ich das in C machen sollte ;-) Ist mein erstes C Projekt für den Atmel und da die Doku nicht so super toll ist tu ich mich noch etwas schwer damit. Kann mir vieleicht jemand ein gutes Buch empfehlen für GCC Programmierung mit dem Atmel, C/C++ Programmieren für den PC kann ich ja einigermaßen aber mit dem Mikroproz. spez. dingen tu ich mich noch etwas schwer. Ne refferenz währe auch net schlecht. Vielen Dank. Gruß Malte.
Nun, den größten Teil mit dem AD-Wandler hast Du ja schon auf die Reihe bekommen. Das ADIE Bit solltest Du aber eben einfach nur dann setzen, wenn Du auch mit Interrupts arbeiten willst -- und dann brauchst Du auch einen Interruptvektor dafür. Das ist eine Funktion, die ungefähr so aussieht: #include <avr/signal.h> SIGNAL(SIG_ADC) { ... } Diese Funktion wird für jede vollständige Konvertierung aufgerufen. Denk dran, FAQ #1, Variablen, die zwischen normaler Applikation und Interruptroutinen Daten vermitteln sollen, müssen als »volatile« deklariert sein. Welche Doku gefällt Dir denn nicht? Du fragst am Ende nach einer Referenz, aber genau das sollte die Doku eigentlich sein. Entscheidend ist vor allem die avr-libc Dokumentation, die streift auch die anderen Gebiete mit. Was Du natürlich unbedingt noch dazu benötigst, ist das Datenblatt von Atmel. Für den ersten AVR, mit dem man arbeitet, braucht man das zwingend ausgedruckt, wenn Du mal sehr viele verschiedene AVRs haben solltest, mußt Du vielleicht nicht mehr jedes drucken, aber als PDF solltest Du sie Dir auf alle Fälle hinlegen und auch zumindest die Dich interessierenden Stellen (hier also bspw. die zum AD-Wandler) aufmerksam lesen. Übrigens sind C und C++ zwei sehr verschiedene Sprachen, auch wenn einem im Microsoft-Umfeld gern der Glaube vermittelt wird, C++ wäre sowas wie eine Weiterentwicklung von C.
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.