-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Atmega8 mit vorhandenem C-Code, Probleme beim compilieren und übertragen auf den Chip

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    01.05.2016
    Beiträge
    11

    Idee Atmega8 mit vorhandenem C-Code, Probleme beim compilieren und übertragen auf den Chip

    Anzeige

    Hallo zusammen,

    ich versuche momentan, einen vorhandenen C-Code für ein Lauflicht mit 6 LED
    auf den ATmega8-Chip zu übertragen, den mir vor einiger Zeit ein
    Elektrotechniker entwickelt hat. Leider steht mir der Bekannte aus
    zeitlichen Gründen nicht mehr zur Verfügung, deshalb hoffe ich auf
    Unterstützung im Forum.

    Ich habe folgende Probleme bzw. Fragen:

    1. Steht auf dem Chip ATmega8 L. Macht das L einen Unterschied zum
    ATmega8-Chip und bei der Programmierung?
    2. Dann habe ich mir damals die Frequenz "Int. RC Osc. 8 MHZ, Start-up
    time 6 CK + 64 ms" aufgeschrieben. Ist diese ok oder zu hoch? In einem
    ATmega8-Turtorial aus dem Internet wird 1 MHz, 6 CK + 0 ms verwendet.
    3. Wurde zur Entwicklung des C-Codes CodeVision AVR verwendet. Kennt
    sich jemand mit der Software aus oder gibt es eine Möglichkeit, den
    C-Code für das AVR-Studio 4 umzuschreiben?
    4. Verwende ich beim CodeVision AVR als Chip-Einstellung "ATmega8 L",
    wie bereits in Frage 1 erwähnt. Ist das korrekt oder verwende ich besser die Einstellung "ATmega8"? Als SCK Frequenz verwende ich "57600".

    Ich habe dazu auch noch ein paar Hardcopies, die passende Schaltung und
    wie gesagt den fertigen C-Code. Als Betriebssystem nutze ich Windows XP und als Hardware das STK500-Board.

    Danke im Voraus.

    Viele Grüße

    Michael

  2. #2
    Unregistriert
    Gast
    Zitat Zitat von Atmeg1970 Beitrag anzeigen
    1. Steht auf dem Chip ATmega8 L. Macht das L einen Unterschied zum
    ATmega8-Chip und bei der Programmierung?
    So wie ich das sehe, bei dir nicht. zB gehst du nicht über 8MHz. Aber schau selbst: http://www.atmel.com/images/atmel-24..._datasheet.pdf
    2. Dann habe ich mir damals die Frequenz "Int. RC Osc. 8 MHZ, Start-up
    time 6 CK + 64 ms" aufgeschrieben. Ist diese ok oder zu hoch? In einem
    ATmega8-Turtorial aus dem Internet wird 1 MHz, 6 CK + 0 ms verwendet.
    Die 8MHz werden eine Voraussetzung für das Programm sein. Du mußt den ATMega8L auf die aufgeschriebenen Werte einstellen. Zu hoch ist sie nicht. Die 1MHz ist die Defaulteinstellung bei fabrikneuen ATmega8.
    3. Wurde zur Entwicklung des C-Codes CodeVision AVR verwendet. Kennt
    sich jemand mit der Software aus oder gibt es eine Möglichkeit, den
    C-Code für das AVR-Studio 4 umzuschreiben?
    Ich kenn mich da nicht aus.

    4. Verwende ich beim CodeVision AVR als Chip-Einstellung "ATmega8 L",
    wie bereits in Frage 1 erwähnt. Ist das korrekt oder verwende ich besser die Einstellung "ATmega8"? Als SCK Frequenz verwende ich "57600".
    Dürfte egal sein aber nimm die Einstellung für den ATmega8L. Ist ja der, den du programmien möchtest. Falls dann was nicht paßt muß man die Ursache suchen.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    01.05.2016
    Beiträge
    11
    Hallo, erstmal vielen Dank für die Antworten. Zum Punkt 3 habe ich das C-Programm auch als Text-Datei vorliegen. Vielleicht funktioniert das ja auch direkt mit anderen Compilern anstatt mit CodeVision wie z.B. mit WinAVR oder AVR Studio.

    Anbei der C-Code:

    #include <mega8.h>
    #include <delay.h>

    unsigned char Lauflicht1[] = {1,2,4,8,16,32};
    unsigned char Lauflicht2[] = {1,2,4,8,16,32,16,8,4,2};
    unsigned char Lauflicht3[] = {33,18,12};
    unsigned char Lauflicht4[] = {3,6,12,24,48,33};
    unsigned char Lauflicht5[] = {33,18,12,12,18,33};
    unsigned char Lauflicht6[] = {9,18,36};
    unsigned char Lauflicht7[] = {9,18,36,18,9};

    signed char modus = 0;
    int i = 0;

    #define ADC_VREF_TYPE 0xC0

    // Read the AD conversion result
    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=0x40;
    // Wait for the AD conversion to complete
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    return ADCW;
    }

    // Timer 1 output compare A interrupt service routine
    interrupt [TIM1_COMPA] void timer1_compa_isr(void)
    {
    TCNT1 = 0;
    OCR1A = read_adc(0) * 8 + 300;
    switch(modus)
    {
    case 0: PORTD = 63;
    break;
    case 1:
    {
    PORTD = ~Lauflicht1[i];
    i++;
    if (i >= sizeof(Lauflicht1))
    i = 0;
    }
    break;
    case 2:
    {
    PORTD = ~Lauflicht2[i];
    i++;
    if (i >= sizeof(Lauflicht2))
    i = 0;
    }
    break;
    case 3:
    {
    PORTD = ~Lauflicht3[i];
    i++;
    if (i >= sizeof(Lauflicht3))
    i = 0;
    }
    break;
    case 4:
    {
    PORTD = ~Lauflicht4[i];
    i++;
    if (i >= sizeof(Lauflicht4))
    i = 0;
    }
    break;
    case 5:
    {
    PORTD = ~Lauflicht5[i];
    i++;
    if (i >= sizeof(Lauflicht5))
    i = 0;
    }
    break;
    case 6:
    {
    PORTD = ~Lauflicht6[i];
    i++;
    if (i >= sizeof(Lauflicht6))
    i = 0;
    }
    break;
    case 7:
    {
    PORTD = ~Lauflicht7[i];
    i++;
    if (i >= sizeof(Lauflicht7))
    i = 0;
    }
    break;
    }

    }

    // Declare your global variables here

    void main(void)
    {
    char check = 0;

    // Input/Output Ports initialization
    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=P
    PORTB=0x01;
    DDRB=0x00;

    // Port C initialization
    // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTC=0x00;
    DDRC=0x00;

    // Port D initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=T State6=T State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
    PORTD=0x3F;
    DDRD=0x3F;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    TCCR0=0x00;
    TCNT0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 7,813 kHz
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: On
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x05;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1A = 100;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    MCUCR=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x10;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    // ADC initialization
    // ADC Clock frequency: 1000,000 kHz
    // ADC Voltage Reference: Int., cap. on AREF
    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0x83;

    // Global enable interrupts
    #asm("sei")

    while (1)
    {
    if (PINB.0 == 0 )
    {
    delay_ms(50);
    if (PINB.0 == 0 && check == 0)
    {
    check = 1;
    i=0;
    modus++;
    if (modus > 7)
    modus = 0;
    }
    }
    else
    check = 0;

    };
    }

    VG Michael
    Geändert von Atmeg1970 (02.05.2016 um 14:49 Uhr)

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Von CodeVision AVR gibt es eine free Version, die bis zu 4k Compiliert.
    Das sollte für dein Programm genügen.
    AVR - GCC und somit AVR Studio wird das nicht anstandslos verstehen und es müssen mit ziemlicher Sicherheit Änderungen gemacht werden.
    Variablendefinitionen, Lesen aus dem Flash, Lesen und Schreiben des EEPROM.
    Das alles macht CodeVision anders als das Studio.

    Bei Programmieren musst Du halt aufpassen, das der Ident Code des Chips im Programmer auf ATMEGA 8 L eingestellt ist.
    Sonst macht der Chip Programmer vom Studio nicht mit.

    Der erzeugte Code müsste aber mit allen Varianten des ATMEGA 8 laufen.
    Eventuell könnte es mit dem ATMEGA 8A Probleme geben, weil der zusätzliche Features hat, aber den willst Du ja nicht verwenden.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    01.05.2016
    Beiträge
    11
    Hallo wkrug,
    ich habe von den einzelnen Programmierschritten einmal Screenshots gemacht. Die Fuses setze ich mit dem AVR-Studio 4 und den C-Code übertrage ich mit einer älteren Evaluation-Version von CodeVision. Die Chip-Programmierung mit dem STK500 scheint auch zu funktionieren, da kein Fehler angezeigt wird, aber der Chip funktioniert in der Schaltung einfach nicht. Die Schaltung ist auf jeden Fall einwandfrei, da ein anderer Chip ohne Probleme läuft. Irgendetwas mache ich verkehrt.
    VG Michael

    Klicke auf die Grafik für eine größere Ansicht

Name:	1.jpg
Hits:	12
Größe:	85,4 KB
ID:	31569Klicke auf die Grafik für eine größere Ansicht

Name:	2.jpg
Hits:	8
Größe:	131,0 KB
ID:	31570Klicke auf die Grafik für eine größere Ansicht

Name:	3.jpg
Hits:	6
Größe:	82,7 KB
ID:	31571Klicke auf die Grafik für eine größere Ansicht

Name:	4.jpg
Hits:	6
Größe:	62,2 KB
ID:	31572Klicke auf die Grafik für eine größere Ansicht

Name:	5.jpg
Hits:	4
Größe:	33,0 KB
ID:	31573Klicke auf die Grafik für eine größere Ansicht

Name:	6.jpg
Hits:	6
Größe:	54,6 KB
ID:	31574Klicke auf die Grafik für eine größere Ansicht

Name:	7.jpg
Hits:	4
Größe:	97,0 KB
ID:	31575Klicke auf die Grafik für eine größere Ansicht

Name:	8.jpg
Hits:	4
Größe:	102,2 KB
ID:	31576Klicke auf die Grafik für eine größere Ansicht

Name:	9.jpg
Hits:	5
Größe:	48,1 KB
ID:	31577

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Ich weiss ja nun nicht, was Du alles gemacht hast, aber...
    Beim ersten Bild musst Du schon den ATMEGA 8L einstellen, Dann machst Du Read Signature und dann muss ein "Match" kommen.
    Geht das nicht, kannst Du die Taktfrequenz des Programmers bis auf 250kHz erhöhen. Also 250 einstellen, dann Save, dann Read -> Dann muss immer noch 250kHz drinstehen. Solange nach Read Signature keine gutmeldung kommt kann der Chip nicht programmiert werden!
    Wenn das schon mal geht, hast Du schon eine Verbindung mit dem Chip.
    Dann nimmst Du den Reiter Programm und wählst hier das .hex File aus, das Du vorher mit Codevision produziert hast.
    Dann machst Du "Programm" und es sollte keine Fehlermeldung im Textfeld unterhalb kommen.
    Wenn Du die Fuses so lässt, sollte der Chip mit internem 8MHz Generator laufen. Gibt es da noch eine CK/8 Fuse? Dann da den Haken raus machen und in den Chip schreiben.

    Bei den Fuses musst Du aufpassen, wenn Du hier was falsches eingibst, kann Dir passieren, das sich der Chip nicht mehr ansprechen lässt!!!!

    Bei CodeVision brauchst Du den AutoProgrammGenerator nicht, weil Du ja schon einen fertigen Quellcode hast.
    Dieser Generator produziert nur die Einstellungen für die Hardware anhand der Listen, die sind aber im Original Quellcode schon drin.
    Wenn Du das trotzdem machst wird dein Originaler Quellcode überschrieben und der Chip tut im Prinzip nichts.

    Wenn Du das schon gemacht hast, überschreib den kompletten Auto Teil mit deinem Original Quellcode und tausche die Parts aus die auf den ATMEGA8 verweisen. Das dürften nur ein oder 2 Zeilen sein.

    Dann sollte das Ganze laufen.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    01.05.2016
    Beiträge
    11
    Hallo wkrug,
    super vielen Dank für Deine ausführliche Erklärung. Werde ich testen und Dir auf jeden Fall eine Rückmeldung geben, ob es so funktioniert hat. Bin momentan leider zeitlich sehr eingeschränkt, um es sofort zu testen.
    VG Michael

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.183
    Sollte es nicht funktionieren, ich habe den Code für das AVR-Studio4 konvertiert. Läuft auch einwandfrei.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    01.05.2016
    Beiträge
    11
    Hallo Hubert,
    das ist ja auch klasse. Daran wäre ich sehr interessiert.
    VG Michael

  10. #10
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.183
    Die gepackte Projektdatei.
    Angehängte Dateien Angehängte Dateien
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Probleme beim Compilieren
    Von ActiveRobo im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 4
    Letzter Beitrag: 30.07.2012, 14:17
  2. Probleme beim Compilieren
    Von Coop im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 20.11.2010, 00:47
  3. Probleme beim compilieren
    Von Ananas im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 2
    Letzter Beitrag: 15.09.2010, 16:49
  4. Gelöst: NIBObee Liniensensoren: Probleme beim Compilieren
    Von DerDudeESP im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 5
    Letzter Beitrag: 06.03.2010, 14:27
  5. WinFact Probleme beim compilieren
    Von Robo14 im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 0
    Letzter Beitrag: 10.05.2006, 09:30

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •