Mega8 gegen Mega 168 ausgetauscht --> LCD Probleme

Gast #714139
Lesenswert?
• ▲
▼
Hallo,

hat vielleicht jemand Erfahrung mit dem ATMega 168 ?

Ich betreibe eine Schaltung mit LCD Display, welches über den Mega u8 
angesteuert wird. Dazu verwende ich die Peter Fleury Library.
Da ich nun Debuggen wollte, habe ich den Mega 8 durch den pinkompatiblen 
Mega 168 ausgetauscht. Jetzt kann ich jedoch das LCD nicht mehr 
ansteuern.

Bin über Hilfe dankbar !
Gast #714175
Lesenswert?
• ▲
▼
Hallo,

vergleich die Datenblätter, Atmel verwendet nicht immer die gleichen 
Registerbezeichnungen für Timer, IO, ADC ...
Sollte Dir aber der Compiler sagen.
Noch bescheidener ist, wenn die Register im höheren Adressbereich 
liegen. Bestimmte Befehle (ASM) sind auf 0..31 oder 0..63 begrenzt.

Grüße
Lothar
#714176
Lesenswert?
• ▲
▼
Niels Hüsken wrote:
> - ggfs. JTAG-Interface aus?
Hat der Mega168 nicht. Ansonsten volle Zustimmung: Code muss auf jeden 
Fall neu compiliert werden (allein schon aufgrund der Tatsache, dass der 
Mega168 jenseits der "magischen Grenze" von 8 KiB Flash liegt) und die 
Fuses dürfen natürlich auch nicht vergessen werden... Pinkompatibel ist 
nicht gleichbedeutend mit funktionskompatibel!
Gast #714937
Lesenswert?
• ▲
▼
Ich hatte tatsächlich auf falsche Register zugegriffen. Außerdem War 
über Fusebits ein fester 1/8 Prescaler eingestellt.

Ein neues Problem hat sich allerdings aufgetan:

Ich nutze 3 AD Wandler.
ADC0 und ADC1 funktionieren. Bei ADC2 wird allerdings immer ein Wert von 
1012 eingelesen, egal ob 5V oder 0V anliegen.

Hat vielleicht jemand irgendwelch Ideen ? Hardwarefehler kann ich 
ausschließen.
#715031
Lesenswert?
• ▲
▼
Johannes M. wrote:
> Und ohne Dein Programm zu kennen, kann man da gar nix zu sagen (außer
> Vermutungen, z.B. Pull-Up aktiviert...)
Dieser Satz sollte ein DEZENTER HINWEIS darauf sein, dass man Dir *nur 
dann* wirklich sinnvoll helfen kann, wenn Du gewisse Informationen (z.B. 
Deinen Code) mal rüberwachsen lässt!
Gast #715058
Lesenswert?
• ▲
▼
Also wie gesagt:

ADC0 und ADC2 funktionieren. Bei ADC2 wird immer 1012 eingelesen, egal 
welche Spannung angliegt.

#define adc0  ADMUX=11000000;    // ADC 0 initialisieren
#define adc1  ADMUX=11000001;    // ADC 1 initialisieren
#define adc2  ADMUX=11000010;    // ADC 2 initialisieren

ADCSRA|=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1);      //ADCs initialisieren

while(1)
{
adc0;      //ADC0 auslesen
ADCSRA |= (1<<ADSC);
while ( ADCSRA & (1<<ADSC) ) {}
temp0=ADC;

dc1;          //ADC1 auslesen
ADCSRA |= (1<<ADSC);
while ( ADCSRA & (1<<ADSC) ) {}
temp1=ADC;
adc2;          //ADC2 auslesen
ADCSRA |= (1<<ADSC);
while ( ADCSRA & (1<<ADSC) ) {}
temp2=ADC;

}

Schon mal Danke für die Hilfe !!
Gast #715070
Lesenswert?
• ▲
▼
#define adc0  ADMUX=11000000;    // ADC 0 initialisieren
#define adc1  ADMUX=11000001;    // ADC 1 initialisieren
#define adc2  ADMUX=11000010;    // ADC 2 initialisieren

volatile uint16_t temp0=0;
volatile uint16_t temp1=0;
volatile uint16_t temp2=0;


DDRC &= ~(1<<PC0);
DDRC &= ~(1<<PC1);
DDRC &= ~(1<<PC2);

ADCSRA|=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1);      //ADCs initialisieren

int main(void)
{

   while(1)
   {

   adc0;      //ADC0 auslesen
   ADCSRA |= (1<<ADSC);
   while ( ADCSRA & (1<<ADSC) ) {}
   temp0=ADC;

   adc1;          //ADC1 auslesen
   ADCSRA |= (1<<ADSC);
   while ( ADCSRA & (1<<ADSC) ) {}
   temp1=ADC;

   adc2;          //ADC2 auslesen
   ADCSRA |= (1<<ADSC);
   while ( ADCSRA & (1<<ADSC) ) {}
   temp2=ADC;

   }
}
#715075
Lesenswert?
• ▲
▼
C-Grundlagen, Lektion 1:
Priogrammcode (z.B. Zuweisungen) kann in C nur innerhalb von 
Funktionen stehen. Deine DDRC-Zuweisungen stehen außerhalb jeglicher 
Funktion und dürften dementsprechend zu Fehlermeldungen führen.

Zweite Lektion ist das, was Michael schon angedeutet hat...

Und jetzt bitte den compilierbaren Code, den Du auch auf dem µC laufen 
hast und mit dem das beschriebene Problem auftritt, und nicht 
irgendwelchen zusammengemurksten Mist.

BTW: Arbeitest Du mit einem JTAG-Adapter, oder woher weißt Du, dass der 
Wert der dritten Wandlung nicht stimmt?
Gast #715328
Lesenswert?
• ▲
▼
Das ist der ganze Code und 2 ADCs funktionieren. Ich sehe das über 
DebugWire.

@Johannes M.  Umgangston , Lektion 1:

Wenn du nicht weist, was der Fehler ist, dann sag es ruhig und mach 
nicht so auf wichtig.
#715332
Lesenswert?
• ▲
▼
Achim wrote:
> Das ist der ganze Code und 2 ADCs funktionieren. Ich sehe das über
> DebugWire.
Du kannst hier niemandem erzählen, dass dieser Code bei Dir ohne 
tonnenweise Fehlermeldungen compiliert, weil er mehrere Syntax-Fehler 
enthält!

> @Johannes M.  Umgangston , Lektion 1:
>
> Wenn du nicht weist, was der Fehler ist, dann sag es ruhig und mach
> nicht so auf wichtig.
Ach, ich dachte, Du willst Hilfe, und nicht ich... Aber wenn Du 
meinst, auf meine Versuche, den Fehler zu finden, gar nicht eingehen zu 
müssen, dann sieh zu, wie Du es selber hinbekommst! Adios...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.