Forum: Mikrocontroller und Digitale Elektronik hilfe beim atmega48


von peter_ruslo (Gast)


Lesenswert?

hallo, ich bin anfänger, also nicht lachen.

ich möchte auf dem stk 500 ein atmega48ans laufen bekommen.

leds blinken auch, aber auf der serielle kommt nur müll raus. immer nur 
"€€"

als quarz habe ich ein 4mhz quarz

fuses stehen auf Ext.Crystal Osc. 3-8Mhz....+65ms

hier der code
1
#include <avr/io.h>
2
3
4
#define CLOCK    4000000                4MHz
5
#define BAUD    9600                
6
#define UBRR_BAUD  ((CLOCK/(16ul*BAUD))-1)    
7
8
int send(unsigned char c)
9
{
10
  while (!(UCSR0A & (1<<UDRE0)));         
11
    UDR0 = c;  
12
    return 0;
13
}
14
15
16
void wait (void)               
17
{ 
18
 unsigned int i;
19
 for (i = 65535; i > 0; i--);
20
}
21
22
23
int main(void)
24
{
25
    UCSR0B  |= (1<<TXEN0);             //TX einschalten
26
    UCSR0C   = (3<<UCSZ00);            //8N1
27
   UBRR0H   = (UBRR_BAUD>>8);          //9600 Baud      
28
   UBRR0L   =  UBRR_BAUD;            //9600 Baud    
29
  DDRB   =  0xff;  
30
31
while (1)
32
{
33
  if (PORTB & (1<<PIN0)) PORTB = 0x00; else PORTB = 0xff;
34
   
35
   wait();
36
37
  send('T');
38
  send('e');
39
  send('s');
40
  send('t');
41
}
42
return 0;
43
44
}

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Ich sehe auf Anhieb folgenden Fehler:
1
#define CLOCK    4000000                4MHz

Was soll das "4MHz" in der Zeile? Wenn das so im Source steht ist es 
falsch.
Hast Du die Fuses korrekt gesetzt?

Michael

von peter_ruslo (Gast)


Lesenswert?

ahja nochwas,

kann man sich nen ISP adapter selber bauen?

also das ich den controller nachher in der schaltung programmieren kann?

oder muss ich den immer ausbauen und im z.B. STK 500 programmieren?

von AVRFan (Gast)


Lesenswert?

Hab jetzt ehrlich gesagt wenig Lust, die ganzen I/O-Settings 
durchzugehen.  Checks selbst noch mal penibel anhand des Data Sheets 
durch - Du kriegst den UART mit Sicherheit erfolgreich zum laufen - 
irgendwann... ;-)

Noch ein Tipp: Weil leere FOR-Schleifen...

for (i = 65535; i > 0; i--);

von C-Compilern gerne mal komplett wegoptimiert werden, empfiehlt es 
sich, ein "nop" reinzuinlinen. Am bestens ist natürlich, auf solche 
Warteschleifen ganz zu verzichten, und für den Zweck Timer zu verwenden.

von peter_ruslo (Gast)


Lesenswert?

arghs das hat der beim kopieren verschlamptt, da stand nen //vor den 
4MhZ

fuses hab ich garkeine gesetzt ausser das mit dem cristal

von AVRFan (Gast)


Lesenswert?

>oder muss ich den immer ausbauen und im z.B. STK 500 programmieren?

Nein, der Clou ist, dass das STK500 ja schon so ein Programmer ist.  Du 
kannst den Controller immer in Deiner Schaltung lassen.  Alles, was Du 
brauchst, ist ein 6-poliger Plug auf der Platine, den Du mit den Pins 
VCC, GND, RESET, SCK, MOSI, MISO vom Controller verbindest.  Zum 
Programmieren Kabel vom Plug zu dem mit "ISP6pin" beschrifteten 
Gegenstück auf dem STK500 stecken und Programmiervorgang starten. Das 
ist alles.

Siehe auch im Handbuch zum STK500, Kapitel "In-System Programming of an 
External Target System".

von Einhart (Gast)


Lesenswert?

Moin,

wenn ich mich nicht sehr täusche kannst du zwar einen Quarz auf's STK500 
stecken aber der hängt mitnichten an den Xtal Pins des Controllers 
(würde auch wegen der Leitungslänge nicht funktionieren).

Der Quarz treibt einen Oszillator auf dem STK. Der Oszillator kann mit 
einem Jumper als externer Takt auf den AVR geschaltet werden. Der AVR 
muss dann per Fuse auf externen Oszillator gesetzt werden.

Nimm solange du keine Platine hast besser den per Softwäre einstellbaren 
STK Takt.

von peter_ruslo (Gast)


Lesenswert?

da machta genau den gleichen schmarn

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.