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. ?
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.
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.
SPI-Interface und UART abgeschaltet? Dass an Port E alle Pins Low bleiben, kann eigentlich nicht passieren, wenn die Portregister korrekt konfiguriert sind.
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?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.