-         

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

Thema: Problem Registerprogrammierung

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.12.2007
    Beiträge
    131

    Problem Registerprogrammierung

    Anzeige

    Hallo,
    ich habe mir mal die Registerprogrammierung angeschaut und wollte mal gleich mit ihr die Status LED grün schalten:
    Aslo habe ich folgenden code verwendet:
    Code:
    {
    DDRD |= (1<<PD0)
    PORTD |= (1<<PB0)
    }
    Nun zeigt mein Compiler allerdings eine Fehlermeldung an:
    [size=9]-------- begin --------
    avr-gcc --version
    avr-gcc (GCC) 3.3.1
    Copyright (C) 2003 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions. There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

    avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
    test.c:1: error: parse error before '{' token
    make: *** [test.o] Error 1

    > Process Exit Code: 2


    Ich weiß nicht was ich machen soll, was mache ich falsch?

    Bitte um schnelel Antworten,
    Hans [/quote]

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    ist das dein gesamter code ? oder nur n ausschnitt ?

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.12.2007
    Beiträge
    131
    ne das ist mein gesamter code

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.12.2007
    Beiträge
    131
    fehlt da was?, habe ich was vergessen?

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    autsch >_< da fehlen wohl die C-Grundlagen ...

    schau dir die beispiel codes bitte an

    ein grundgerüst ist z.B.

    Code:
    #include "asuro_prog.h" // lädt die bibliothek für die befehle
    
    int main(void)  //der einsprungpunkt ist immer die main-methode
    {
         Init();			// initialisieren des prozessor
          // hier kannst du variablen initialisieren und auch 
          // lichter die dauerhaft an sein sollen (dein code z.B.)
         while(1){
             // hier wird permanent eine schleife durchlaufen
             // hier fragst du z.B. regelmäßig die taster ab und reagierst
         }
         return 0; // das ist nur obligatorisch ... dein asuro sollte NIE
                       // aus der schleife kommen, dann ist sein zustand undefiniert
    }
    EDIT: sorry das einrücken iss bissl schief gegangen ich hoffe es geht so besser

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Ein komplettes Programm sieht etwa so aus:
    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    int main(void)
    {
    	DDRB=0; // nicht benoetigte Ports auf Eingang setzen
    	DDRC=0;
    	DDRD=0b00000100; //rote StatusLED haengt an PD2(= Port D, Bit2)
    	PORTD=0b00000100; // Ausgang setzen
    	while(1);
    	return(0);
    }
    Und noch meine ersten Versuche, eine Tastenabfrage:
    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    
    int main(void)
    {
    	unsigned int i,j;
    
    	for (i=0; i < 20; i++) { for (j=0; j < 65535; j++); }
    	DDRB=0; // nicht benoetigte Ports auf Eingang setzen
    	DDRC=0;
    	DDRD=0b00000100; //rote StatusLED haengt an PD2(= Port D, Bit2)
    	PORTD=0b00000100;
    	while(1)
    	{
    /*
    Die Tasten haengen an PortC Bit4. Wenn keine Taste gedrueckt ist,
    wird ueber R23 VCC an diesen Pin gelegt. Das ergibt eine 1 beim Einlesen.
    
    Wenn man dann eine Taste drueckt, ergibt sich ein Spannungsteiler,
    bei dem der Pin dann deutlich, bei K6 1000K zu 68K, nach 0V gezogen wird.
    Das ergibt eine 0 am Eingang.
    
    Den C7 kann man ignorieren, R24 ebenfalls, weil PD3 als Eingang (ohne Pullup?)
    geschaltet ist.
    */
    
    		if (PINC & 0b00010000) // PortC Bit4 ist der Tasteneingang
    		{
    			PORTD=0b00000100; // StatusLED rot setzen
    		}
    		else
    		{
    			PORTD=0b00000000; // StatusLED ausschalten
    		}
    
    /*
    Spätestens jetzt wird auch mir klar, dass die Bitschieberei effektiver ist:
    
       PORTD=((PINC & (1<<PC4))  >> 2);
    
    */
    	}
    	return(0);
    }
    ..und noch eine Einschaltverzögerung:
    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    unsigned int timer_startwert=65536-7812; // 8MHz/1024=7812,5
    int main(void)
    {
    	DDRB=0; // nicht benoetigte Ports auf Eingang setzen
    	PORTB=0; // und die Pullups aus, sonst "glimmt" die StatusLED gruen
    	DDRC=0;
    	PORTC=0;
    	DDRD=(1 << PD2); //rote StatusLED haengt an PD2(= Port D, Bit2)
    	DDRD|=(1 << PD7); // Kathoden der BackLEDs haengen auf PD7
    	PORTD=(1 << PD7); // high an PD7 schaltet die BackLEDs aus
    
    /* Es folgt eine Einschaltverzögerung von ca. 1 Sekunde */
       TCNT1=timer_startwert; // 16-Bit auf einmal laden?
       TCCR1B |= 0b00000101; // Prescaller Timer1 auf 1024 setzen
       while(!(TIFR & (1 <<TOV1) )); //Warten bis Überlauf Timer1
       TCCR1B &= ~0b00000101; // Prescaller löschen bedeutet Timer1 stoppen
       TIFR = (1 << TOV1); // Flag setzen bedeutet Flag wieder löschen
    
    	while(1) PORTD=(1 << PD7) | ((PINC & (1<<PC4))  >> 2); // eine Taste schaltet StatusLED aus
    
    	return(0);
    }
    Dann wurde mein RP6 geliefert und der asuro eingemottet...

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    ja sry ich hab gedacht das er den asuro weiterhin mit normalen befehlen füttern will

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.12.2007
    Beiträge
    131
    Hallo,
    also erstmal dne ASURO mit vorgefertigten Funktionen zu füttern, das kann ich schon
    nun zum eig thema:
    wenn ich nun deinen programm code compiliere, dann kommt folgende fehlermeldung,
    avr-gcc --version
    avr-gcc (GCC) 3.3.1
    Copyright (C) 2003 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions. There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

    avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
    test.c:8:9: invalid suffix "b00000100" on integer constant
    test.c:9:10: invalid suffix "b00000100" on integer constant
    make: *** [test.o] Error 1

    > Process Exit Code: 2

    woran könnte das liegen?

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Das liegt an avr-gcc, das kann manchmal keine binären Zahlen. Du kannst 0b00000100 durch (1<<2) oder 4 ersetzen. ( und 0b00010000 durch 16)

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.12.2007
    Beiträge
    131
    also sähe dann mein programm wie folgt aus:
    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    int main(void)
    {
       DDRB=0; // nicht benoetigte Ports auf Eingang setzen
       DDRC=0;
       DDRD=4; //rote StatusLED haengt an PD2(= Port D, Bit2)
       PORTD=4; // Ausgang setzen
       while(1);
       return(0);
    }
    oder, etwa nicht?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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