Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich verwende einen Atmega 644.
Das Testprogramm ist ein wenig durcheinander weil ich da allen möglichen Kram mit teste, also nicht wundern wenn da Zeugs drin ist, was nicht benötigt wird.
Code:
#include <avr/io.h>
#ifndef F_CPU
/* Definiere F_CPU, wenn F_CPU nicht bereits vorher definiert
(z.B. durch Übergabe als Parameter zum Compiler innerhalb
des Makefiles). Zusätzlich Ausgabe einer Warnung, die auf die
"nachträgliche" Definition hinweist */
#warning "F_CPU war noch nicht definiert, wird nun mit 16000000 definiert"
#define F_CPU 16000000UL /* Quarz mit 16.0000 Mhz */
#endif
#include <util/delay.h>
#include "i2cmaster.h"
#include <util/delay.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <string.h>
#define Dev24C02 0xA2
#define UART_BAUD_RATE 19200L
#define UART_BAUD_CALC(UART_BAUD_RATE,F_CPU) ((F_CPU)/((UART_BAUD_RATE)*16L)-1L)
int main( void )
{
while(1)
{
PORTD ^= ( 1 << PD2 ); // Toggle
for(int i=0; i < 7 ; i++)
{
_delay_ms(1000);
}
}
}
Gruß, Andreas
Liste der Anhänge anzeigen (Anzahl: 1)
Mit dem Programm bin ich noch nicht einverstanden.
Du hast nirgends DDRD (Data Direction Register) definiert, d.h. der PD2 ist noch als Eingang geschaltet. Wenn du dann PORTD ansprichst, wird lediglich der Pull-up gesetzt / gelöscht.
Da der integrierte Pullup aber auch so im Bereich 10kOhm aufwärts hat, wirkt das mit den äußeren Widerständen als Spannungsteiler, die Spannung am Gate ist dann wohl zu niedrig für den FET.
Du musst das entsprechende Bit in DDRD auf 1 setzen, um PD2 als Ausgang zu schalten (siehe Tabelle im Anhang). Also
noch vor die while-Schleife. Dann ist der Pin ein "echter" Push-Pull-Treiber und kann genug Strom liefern.
Nebenbei: Du hast die delay.h 2x eingebunden
Grüße,
Bernhard