PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmega 8 Port C macht mir Probleme



Mumpi
17.09.2013, 20:20
Moin zusammen,
ich habe heute einen Atmega 8 auf einem Evaluierungsboard (http://www.pollin.de/shop/dt/NTI5OTgxOTk-/Bausaetze_Module/Bausaetze/ATMEL_Evaluations_Board_V2_0_1_Fertigmodul.html) in C programmiert.
Im Grunde habe ich nur den Port C Pin 0 als Ausgang verschaltet. Dann habe ich versucht an diesem Port ein Rechtecksignal zu erzeugen. Mit dem Osziloskop konnte ich aber nur eine Spannung von ca. 2.5V messen. Kennt jemand diese Problematik? Kann das am ADC liegen? Hier nochmal ein teil vom Quellcode:

void init(){
DDRC = (1<<PC0);

}


int main(void)
{
while(1){
PORTC = (1<<PC0);
_delay_ms(500);
PORTC = (0<<PC0);
_delay_ms(500);
}
}

Vielen Dank für eventuelle Tipps oder Lösungsansätze.

shedepe
17.09.2013, 23:03
Wenn der Mega8 einen JTAG Anschluss hat, dann dürfte der wohl daran Schuld sein. Den kannst du in den Fuses deaktivieren.

markusj
17.09.2013, 23:46
Es wäre eine gute Idee, init() auch in main() aufzurufen ... Die Ausführung startet IMMER bei main(), wenn du andere Funktionen ausgeführt haben möchtest, musst du das selbst tun. Ausnahmen davon sind nur die Interruptroutinen, aber das hat hiermit nichts zu tun.

Der Mega8 hat übrigens kein JTAG, dafür ist er zu klein. Die Nachfolger, Mega[4|8|16|32]8 verfügen aus dem Grund auch "nur" über debugWIRE.

mfG,
Markus

Nachtrag: Benutze doch bitte in Zukunft die Code-Tags, das verbessert die Lesbarkeit. Mit dem PHP-Tag gibt es sogar etwas Syntax-Highlighting.

Wsk8
18.09.2013, 00:49
Soweit ich mich erinnern kann, funktioniert das setzen einer 0 nicht. Machs doch einfach wie es in jedem Tut gemacht wird:



void Init() {
// PC0 als Output
DDRC = 0x01;
}


int main() {
// Ports initialisieren
Init();

while(1) {
// PC0 setzen
PORTC |= (1<<PC0);
_delay_ms(500);

// PC0 löschen
PORTC &= ~(1<<PC0);
_delay_ms(500);
}
}



Oder noch besser:


int main() {
// Ports initialisieren
Init();

while(1) {
// PC0 togglen
PORTC ^= (1<<PC0);
_delay_ms(500);
}
}


mfg

oberallgeier
18.09.2013, 09:02
Wenn der Mega8 einen JTAG Anschluss hat ...Hi, shepede, wohl noch nie das Datenblatt vom mega8 gelesen? Und wenn der mega8 JTAG hätte, wäre das kaum ein Problem - JTAG-Pins sind afaik nicht mit P0 verbunden. Also doppelt daneben?

shedepe
18.09.2013, 12:45
Ne nur das selbe Problem mit nem Mega32 gehabt.

Mumpi
18.09.2013, 14:11
Mein Gott, vielen Dank erstmal. Der Fehler lag definitiv zwischen den Kopfhörern. Natürlich sollte ich init() aufrufen wenn ich denn schon in eine eigene Routine schreibe. Manchmal sieht man den Wald vor lauter Bäumen nicht. :) Vielen Dank!