www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mega8 gegen Mega 168 ausgetauscht --> LCD Probleme


Autor: Achim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !

Autor: vorbeigeschlendert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ohne jetzt darüber nachzudenken: die headerfiles entsprechend dem 
'neuen' Controller ausgewählt und neu übersetzt?

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achim wrote:

> hat vielleicht jemand Erfahrung mit dem ATMega 168 ?

Nein, aber meine Ideen dazu:

- Taktgeschwindigkeit gleichgeblieben?
- Code für den den Controller neu generiert?
- ggfs. JTAG-Interface aus?

Autor: Lothar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Achim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
[Klugscheiß]
Du kannst keine 3 AD-Wandler benutzen. Der Mega168 hat nur einen 
einzigen...
[/Klugscheiß]

Und ohne Dein Programm zu kennen, kann man da gar nix zu sagen (außer 
Vermutungen, z.B. Pull-Up aktiviert...)

Autor: Achim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf jeden Fall frägt der Multiplexer ordnungsgemäß ADC0, ADC1 und ADC2 
ab.
Interne Pullup-Widertände sind nicht aktiviert.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Achim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !!

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist nicht das vollständige Programm! Da fehlt zumindest die 
Port-Initialisierung. Außerdem kann man Code auch vernünftig 
formatieren...

Autor: Achim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

   }
}

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hinter einem #define darf kein Semikolon stehen!

MW

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Achim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.