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

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