Wenn der Mega8 einen JTAG Anschluss hat, dann dürfte der wohl daran Schuld sein. Den kannst du in den Fuses deaktivieren.
Moin zusammen,
ich habe heute einen Atmega 8 auf einem Evaluierungsboard (http://www.pollin.de/shop/dt/NTI5OTg...rtigmodul.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.
Wenn der Mega8 einen JTAG Anschluss hat, dann dürfte der wohl daran Schuld sein. Den kannst du in den Fuses deaktivieren.
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.
Tiny ASURO Library: Thread und sf.net Seite
Soweit ich mich erinnern kann, funktioniert das setzen einer 0 nicht. Machs doch einfach wie es in jedem Tut gemacht wird:
Code: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:
mfgCode:int main() { // Ports initialisieren Init(); while(1) { // PC0 togglen PORTC ^= (1<<PC0); _delay_ms(500); } }
Ne nur das selbe Problem mit nem Mega32 gehabt.
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!
Lesezeichen