Forum: Mikrocontroller und Digitale Elektronik portB und portE an ATMEGA64


von Ueli (Gast)


Lesenswert?

ich möchte diese beiden ports als Ausgänge für die Ansteuerung externer 
'Geräte' (Steuerung von Multiplexern) benutzen. Die Pins des ports B 
scheinen durch Zweitfunktionen (ISP) belegt zu sein. Kann ich diesen 
Port wirklich nicht benutzen? (Ich möchte den ATMEGA immer noch über 
AVR910/911 und ISP programmieren können.
Warum das Ansteuern von Port E nicht funktioniert ist mir ein Rätsel, da 
es laut Datenblatt ja keine blockierenden Zweitfkt gibt.
?

von Johannes M. (johnny-m)


Lesenswert?

Die ISP-Anschlüsse liegen beim Mega64 nicht an PORTB (MISO, MOSI), 
sondern an PORTE (PDO, PDI)! Außerdem könnte es sein, dass die Mega103 
compatibility fuse noch gesetzt ist (Auslieferungszustand), die 
bestimmte Funktionen des Mega64 blockiert.

von Ueli (Gast)


Lesenswert?

Das mit PDO/PDI hab ich bereits bemerkt. An PORTB liegen aber noch SS, 
SCK und MOSI,MISO. Jedenfalls kann ich im Moment weder B noch E als 
Output benutzen. Wollte testweise 0x02 an B einstellen, d.h. PB1=1 alle 
anderen =0. Tatsächlich aber ist PB0=1 und  PB3=1.
Ähnlich an PORTE: will im Programm 0x08 ausgeben, tatsächlich aber sind 
alle Pins auf Low.

Compatibility-fuse hab ich gelöscht.

von Johannes M. (johnny-m)


Lesenswert?

SPI-Interface und UART abgeschaltet? Dass an Port E alle Pins Low 
bleiben, kann eigentlich nicht passieren, wenn die Portregister korrekt 
konfiguriert sind.

von Ueli (Gast)


Lesenswert?

Der USART sollte standartmässig abgeschaltet sein. Wie meinst du 
SPI-Interface abschalten? SPIEN-Fusebit? Kann ich ihn dann noch über 
mein AVR910 Programmer am ISP programmieren?

von Ueli (Gast)


Lesenswert?

hab grad eine interessante Entdeckung gemacht:
Es ist wohl ein anderer Fehler im Programm:

setze ich das gewünschte bei der Initialisierung (// Setzen bei INIT der 
PORTS), so funktioniert alles prächtig, will ich die Ports aber weiter 
'unten' im Programm setzen (//WOLLTE HIER SETZEN), so gehts nicht.
Ich bleib wohl irgendwo dazwischen stecken? Sehe den Fehler allerdings 
nicht.

  //DDRA=0xFF;  PORTA=0x00;
  DDRB=0xff;  PORTB=0x02;  // Setzen bei INIT der PORTS
  //PORTC
  //PORTD
  DDRE=0xff;  PORTE=0x08;       // Setzen bei INIT der PORTS
  DDRF=0xff; PORTF=0x00;
  //PORTG
  wdt_enable(WDTO_2S);
  //wdt_disable();


  // Timers
  timer.busy1=0;timer.busy3=0;
  // 16-bit Timer1&3 :: Weichen

  TCCR1A=0x00;
  TCCR1B=0x00;    //Timer gestoppt
  TIMSK=0x10;
  TCCR3A=0x00;
  TCCR3B=0x00;

  sei();

  wdt_reset();
  lcd_init(LCD_DISP_ON);
  lcd_data(LCD_FUNCTION_4BIT_2LINES);
  lcd_clrscr();
  lcd_home();
  lcd_puts("Willkommen");

  wdt_reset();

  //setSP(&sp[0],0);
  //switchSP();
  PORTE=0x08;                  //WOLLTE HIER SETZEN
  PORTB=0x02;                  //WOLLTE HIER SETZEN

von Ueli (Gast)


Lesenswert?

hat sich erledigt, der einzige Fehler war, dass ich das Display an PORTF 
nicht verbunden hatte (weil ich es eigentlich nicht benötigte), die 
Displayansteuerungsfunktion blöderweise aber eine Antwort des Displays 
erwartet. :-)

Vielen Dank für deine Hilfe!

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
Noch kein Account? Hier anmelden.