www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C Programm läuft nicht auf Atmega16


Autor: Dd Dd (neo120484)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten abend ich hoffe sehr ich mache mich hier jetzt nicht all zu
unbeliebt, aber alles lesen von Datenblättern tutorials und
forumsbeiträgen hat mir nicht wirklich weitergeholfen..

Erst mal vorweg, ich fange gerade erst an mich mit uC von Atmel
auseinander zu setzen .. Ich hab zwar ein gewisses Grundverständnis
durch prkatikas an der FH jedoch nicht wirklich den durchblick..


ich habe einen Atmega16 und das STK500 board zu hause diesen wollte ich
via ISP Interface programmieren .. das klappt auch wunder bar
jendenfalls sagt er mir das er es auf das flash geladen hat und wenn
ich es auslese steht da auch was drinnen..

zum anfang wollte ich eigenlich nur mal 2 led' leuchten lassen..

dazu hab ich die zugehörigen headerdateien includiert
also die avr/io oder wie sie heißt ( programm ist auf meinem ander PC)

das Datenrichtungsregister meines Port D also PD0-PD7 auf ausgang
gestellt und dann mit PORTD = (1<<2); die eins um 2 nach links
geshiftet..

soweit so gut das ganze dann in einer endlosschleife hängen lassen..

jedoch leuchten zwar led's aber ers mal die falschen und zudem
leuchten die immer egal ob ich den uC lösche oder nicht.. die
restlichen led's glimmen leicht was mich auch nicht gerade fröhlich
stimmt..

so das zu meinen Anfängen wäre nett wenn mir jemand weiter helfen
könnte.. ach ja an der fuses und dem Lockbits hab ich nichts verändert
die sind noch werksseitig eingestellt die frequenz des Oszillators hab
ich auf ein paar kHz (50 oder so ist ja vorgegeben)im AVR studio
eingestellt..

danke für eure mühen
gruß Dominik

Autor: Ronny F. (ronny)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zunächst:

Prüf bitte mal nach,ob der PortD auf dem STK500 auch wirklich mit den
LEDs verbunden ist.

Die Zeile

PORTD = (1<<2);   // 1<<2 = 4 = 100b

schaltet nur eine einzige LED AUS,da wenn ich mich Recht erinner auf
dem STK die LEDs Low-Aktiv angebunden sind.Der Rest sollte dann mit
voller Helligkeit leuchten.

Wie sieht der komplette Code aus?Hast du den mal mit einem AVR-Tutorial
verglichen?Das mit der LED ist eine Standartübung,da sollte es gute
Beispiele für geben.Gruss,

Ronny

Autor: Jansen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie wäre es mal den code zu posten?

ja ich weiss, anderer rechner...aber wie soll man so bitte mal schnell
weiterhelfen.

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal in den Schaltplan,des STK500
Die LED's sind lowaktiv, ich gehe mal davon aus dein Programm ist
richtig, da ich sehr vermute das du keine Pause zwischen den Schifts
machst, hast du da eine sehr hohe Frequenz (möglicherweise ist das das
glimmen? hänge es doch einfach mal an den Oszi und schau dir die
Signale an.
Wenn du an den Fuses nichts geändert hast läuft der Atmel mit internen
Takt 1 MHz und deine Frequenz von ein paar Kiloherz bei der 50
vorgegeben sind dürfte die ISP Frequenz sein, das ist die Frequenz mit
der sich STK500 und Mikrocontroller unterhalten wenn der
Mikrocontroller programmiert wird, nicht deine Taktfrequenz!
Zum STK500 gibt es auch ein Bsp.programm zum LED leuchten lassen.

Autor: Dd Dd (neo120484)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für eure antworten und sorry das ich das prog gestern nicht mehr
geposted hab ich hatte heute eine wichtige Prüfung..

Jedenfalls hab ich mal einen anderen uC genommen und es funktioniert
einwandfrei scheint also der uC ein spinner zu haben..

thx
Dominik

Autor: Dd Dd (neo120484)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider scheint es doch nicht so zu funktionieren wie ich dachte also hab
eigentlich immer noch das problem das die LED an Port PB1 Leuchtet trozt
 auskommentierens.



Hier mal mein quelltext:

//------------------------------------Includes-------------------------- 
---------
#include <avr/io.h>
#include <stdint.h>
#include <compat\ina90.h>
//------------------------------------Defines--------------------------- 
---------
#define FOSC 3686400
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1


//------------------------------------Functions------------------------- 
---------
//=============Init function
void USART_INIT(unsigned int ubrr)
{
  //Set Bautrate
  UBRR0H =(unsigned char)(ubrr<<8);
  UBRR0L =(unsigned char)ubrr;

  //Enable receive and transive
  UCSR0B = (1<<RXEN0) | (1 << TXEN0);

  //Set Frame format
  UCSR0C = (1<<USBS0)|(1<<UCSZ00);
}


//=============Send function
void USART_Transmit(unsigned char data)
{
  //Wait for empty Register
  while(!(UCSR0A &(1<<UDRE0)));

  //Send data
  UDR0 = data;
}


//=============Delay function
void delay_ms( unsigned int ms )
{
    unsigned int  i;
    unsigned int  j;

    for ( i = ms;  i;  i-- )
    {
        for ( j = 51;  j;  j-- )
        {
        }
    }
}






int main(void)
{
//  PORTB = 0xff;
//  DDRB  = (1<<1);

//  PORTB = (0<<2);
//      delay_ms(100);
//  PORTB = (1<<2);



  USART_INIT(MYUBRR);

  while(1)
  {
    USART_Transmit('a');
  //  PORTB = (0<<2);
        //      delay_ms(100);
  //  PORTB = (1<<2);
  }

}

wäre nett wenn mir da jemand weiter helfen könnte eigentlich soll die
LED nur als kontrollinformation dienen..

gruß Dominik

Autor: Dd Dd (neo120484)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
update...

sehr mystriös finde ich auch das 3 Pins von Port B auf low gehen wenn
ich zwischen fuses und lockbits hin und her wechsle am rechner..also
nur   wenn ich mit der maus zwischen den 2 karteikarten hin und her
wechsle..

und sobald ich mit dem DDRB die pins als Ausgang definiern leuchte die
LED`s egal was oder wie ich es auf Port B

Autor: Miszou M. (mize)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

find ich nicht, irgendwie müssen die Daten auch aus dem Controller
gelesen werden und da deine ISP Pins auf dem PortB liegen, kann es
schon mal vorkommen das etwas komisches während dem Schreiben oder
Lesen vom Controller geschieht.

Zu deinem Ports:
DDRB steht "1" also Pin1 auf Ausgang, der Rest ist Eingang mit
aktivierten Pull Up.
Aber ein und ausschalten tust du Pin2, der ist aber ein Eingang.

Gruß MISZOU

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.