- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 15

Thema: AVR und Umstieg von Assembler auf C Programmierung

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.698
    Hallo Rolf!

    ... mir raucht der Kopf! ...
    // muß ich doch vor einem Kommentar setzen.
    Aber was ist das denn..//#include <lcd_162_mini-no-wait.c> auch ein Kommentar?
    Rauchen ist beim Kopf zulässig, beim IC bedeutet es meist nix Gutes.

    Doppel-Schrägstrich beginnt einen Kommentar bis zum Zeilenende - auch wenns im Prinzip Code ist.
    /* (Schrägstrich Stern) beginnt einen Kommentar - der kann mehrzeilig sein und wird mit */ beendet.

    A) Bitte schreibe das nächste Mal Deinen Code ins Codefenster. Das bekommst Du im Editor mit dem Button [#] - wenn Du den nicht siehst, dann drücke bitte auf "Erweiterte Ansicht". Im Editor sieht das dann so aus: [.CODE][./CODE] . Im Editor steht aber kein Leerzeichen nach der ersten Klammer. Und das Fenster ist dann erstmal leer. Nun die Schreibweise mit "nix" zwischen [ und C bzw. [ und /:

    Code:
    .
    Dieses Beispiel ist tricky, funktioniert "normalerweise" nicht *gggg*.

    B) Schau mal nach meinem Posting vom 09.02.2015, 14:34, bei "main Modul".
    Bei Dir könnte das etwa so aussehen:

    Code:
    //  Jetzt fängt der Code an mit Einschluss von Bibliotheken und
    //      Definitionen
    #include <avr/io.h>
    #include <util/delay.h>  // Hier ist eine "Wartefunktion" enthalten
    #define Takt 1000000 // Systemtakt 1 MHz intern
    
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void main (void) // Hauptfunktion, was ist das?
                            // Das ist das eigentliche Hauptprogramm,
                            //      die Unterprogramme müssen vorher schon
                            //      geschrieben sein oder includierte werden
                            //      siehe dazu z.B. die o.g. Bibliotheken io.h etc
    // - - - - - - - - - - - - - - - -
    //                         Nun werden mal die Ports konfiguriert
    // Ports+Pins als Ein- (0) od. Ausgänge (1) konfigurieren, Pull Ups (1) aktivieren
    // - - - - - - - - - - - - - - - -
      DDRA  = 0b00000000;   // Alle Pins auf Eingang
      PORTA = 0b11100101;   // Pinn 0, 2 sowie fünf bis sieben mit Pullup
                            //
      DDRB  = 0b11111111;   // Alle Pins auf Ausgang
      PORTB = 0b00001111;   // Pinn 0-3 high => LEDs an, 4-7 auf low => LEDs aus
                            //
      DDRC  = 0b00111111;   // Pinn 0-5 auf Ausgang, 2 Eingänge
      PORTC = 0b11000000;   // Ausgänge 0-4 auf low, 5 auf high, PullUp für 6+7
                            // 
      DDRD  = 0b00000000;   // Alles Eingänge
      PORTD = 0b00001111;   //   Pullups einschalten (Schalter schaltet gegen GND)
                            //
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                            // Wir bewundern mal die LEDs - an oder aus
      _delay_ms( 1000);    // ... ne ganze Sekunde
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      for ( uint8_t i=0; i< 100; i++)       // LEDs 100 mal blinken lassen 
      {                     //   Schleifenanfang
    // - - - - - - - - - - - -
        PORTB |=  (1<<PB6};    // LED auf PB6 einschalten
        PORTB &= ~(1<<PB1); // LED auf PB1 ausschalten
        _delay_ms(  500);    // Nun warten wir ne halbe Sekunde (LED bewundern)
    
        PORTB &= ~(1<<PB6};    // LED auf PB6 ausschalten
        PORTB |=  (1<<PB1); // LED auf PB1 einschalten
        _delay_ms(  500);    // Nun warten wir ne halbe Sekunde (LED bewundern)
      }             // Ende von for ( uint8_t i=0; i< 100; i++)
    
    // - - - - - - - - - - - -
      return 0;             // Ende des Programms
    /* und zum Schluss noch ein mehrzeiliger Kommentar:
    Lorem ipsum dolor sit amet, consectetur adipisicing elit,
    sed do  eiusmod tempor incididunt ut labore et dolore magna aliqua. 
    Ut enim ad  minim veniam, quis nostrud exercitation 
    ullamco laboris nisi ut aliquip  ex ea commodo consequat. 
    Duis aute irure dolor in reprehenderit in  voluptate velit esse ...
    */
    Wenn ich ausreichend gefrühstückt habe müsstesollte das funktionieren. Ohne Tastendruck und nur hundert Blinkies.
    Geändert von oberallgeier (12.02.2015 um 10:05 Uhr)
    Ciao sagt der JoeamBerg

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    20.08.2011
    Beiträge
    61
    Hallo Oberallgeier,
    meinen Dank für Deinen zurecht gerückten Code.
    Hab ihn ins Studio4 rüber kopiert und ausgedruckt. Das muß ich jetzt erst mal verarbeiten.
    Die vielen Zeichen die hier ihre Bedeutung haben, gab es natürlich in Assembler nicht.
    Auch z.B. DDRB = 0b00000000 wurden mit 0xFF erledigt...oder geht das in C nicht?
    Klar waren hier 2 Zeilen notwendig...wie
    ldi akku,0xFF ;alle Bits in r16 = 1
    out DDRB,Akku ;Datenrichtung = Output

    Aber ich habs mir nun vorgenommen und muß da durch.

    Das Wetter ist im Norden besch....

    Viele Grüße

    Rolf

    - - - Aktualisiert - - -

    Sorry, wollte nur sehen, ob ich das hinbekomme!

    Code:
      DDRA  = 0b00000000;   // Alle Pins auf Eingang
      PORTA = 0b11100101;   // Pinn 0, 2 sowie fünf bis sieben mit Pullup
                            //
      DDRB  = 0b11111111;   // Alle Pins auf Ausgang
      PORTB = 0b00001111;   // Pinn 0-3 high => LEDs an, 4-7 auf low => LEDs aus
                            //
      DDRC  = 0b00111111;   // Pinn 0-5 auf Ausgang, 2 Eingänge

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.698
    Zitat Zitat von hegewald Beitrag anzeigen
    ... Die vielen Zeichen ... gab es natürlich in Assembler nicht.
    Auch z.B. DDRB = 0b00000000 wurden mit 0xFF erledigt...oder geht das in C nicht?
    Hallo Rolf, natürlich gabs in Assembler nicht die vielen kryptischen Zeichen. Dem Assembler wird auch nicht nachgesagt dass er von seinen Autoren im reichlich eingetrübten Zustand (auf Deutsch heisst das "Suff") erstellt worden wäre. Manche sagen das den Jungs Kernighan & Ritchie aber nach . . .

    Ok, man kann in C natürlich statt
    DDRB = 0b00000000; auch
    DDRB = 0xFF;
    schreiben - also in hex. Es geht aber auch einfach
    DDRB = 255;
    eben dezimal. Und wenn Du Deinen Code weniger leserlich willst, dann schreibste
    DDRB = 0377;
    also oktal *ggg* - erkennbar an der führenden Null. Und wenns noch hyroglyphischer werden soll, ginge (mal zur Abwechslung - und wegen ASCII -) für die Ziffer 116 dezimal auch ein
    DDRB = 't';
    also das ASCII-Zeichen. MEINE Vorliebe ist >>bei Portdefinitionen<< die binäre Darstellung "DDRC = 0b00111111;" - erkennbar an dem Vorspann "0b"- da sehe ich nämlich sofort, welche Pinne Eingang und welche Ausgang sind - das ist bei der gleichWERTigen Darstellung 0x3F für meine Augen nicht der Fall. Wenn ich dagegen, z.B. beim Empfang eines UART-Befehls (ähnlich EIA232) einen bestimmten ASCII-Wert abfrage, dann schreibe ich z.B. if ( eingabe == 't' ) ... - das liest sich eben besser als if ( eingabe == 116 ) ... Wie gesagt, irgendwann waren irgendwo bei C vermutlichvielleicht doch ein paar fl.oz.-chen Alk im Spiel, oder gar ein Gallönchen.

    Bravo zum Codefenstertest!




    [OT]Wetter . . . heute lag ich nach dem mittäglichen Kaffee mehr als eine Stunde auf meiner Südterrasse. Im Schatten rund 0°C, im Sonnenschein auf der Terrasse bei blauem Himmel . . . wars einfach warm - weil dazu auch windstill.[/OT]
    Ciao sagt der JoeamBerg

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    C sollte man eigentlich anhand eines Buches oder eines der verfügbaren Tutorials auf einem PC lernen. Da liefert einem der Rechner alles, was man braucht: die Tastatur als Input, den Bildschirm als Output sowie Tools, wie einen Debugger, ohne Ende. Unter Linux sind die erforderlichen Programme sowieso frei und unter Windows gibt es Visual Studio Express ebenfalls kostenlos. Da gibt es dann online Syntax-Checks, Single Step, die komplette Sicht auf alle Variablen und eine Menge andere Hilfe. Wenn man dann mit der Sprache einigermaßen klar kommt, kann man auf (irgend)einen µC umsteigen.

    Und man sollte garnicht erst versuchen, die Sichtweise des Assenblerprogrammierers auf den Rechner in C nachzuvollziehen. Und sich von Prozessorregistern, Carryflag oder Stackpointer zu lösen, gelingt einem leichter auf einem PC. Danach spielt es dann auch keine Rolle mehr, ob man für AVR, PIC, ARM oder X86 programmiert.

    Hallo Rolf, natürlich gabs in Assembler nicht die vielen kryptischen Zeichen
    Aber selbstverständlich gibt es die, eher noch mehr. Und natürlich kann jeder Assembler Zahlen in jeder nur denkbaren Schreibweise verarbeiten, von binär bis oktal und natürlich auch als ASCII Zeichen. Dafür schleppt er aber das alte Fortran-Lochkartenformat mit sich rum, und es hat ziemlich lange gedauert, bis Labels mit mehr als 8 Zeichen zulässig waren. Und moderne Assembler benutzen sogar den C-Präprozessor weils einfach praktisch ist.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    20.08.2011
    Beiträge
    61
    danke für Eure Antworten!

    Mit meinen AVR Studio4 aus dem Jahre 2011 werde ich nichts. Hatte erst mal versucht das Fenster zu öffnen,
    um ein neues Projekt zu installieren. Umgestellt von Assembler auf Cxxx...Projektname eingegeben,
    den Mega8 ausgesucht und ok. Dann den Code von Oberallgeier im Editor und nochmal abgespeichert.
    Jetzt wie gewohnt auf "BUILD" aber es tut sich wie sonst gewohnt (kurz laufender Balken) gar nichts.
    Google sagt mir, ich müsse bei Studio4 vorab das WINAVR installieren.
    Ich habe das Studio4 noch nicht runter geschmissen.

    Oder gleich das Studio5 nehmen?

    Grüße

    Rolf

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.698
    ... Mit meinen AVR Studio4 aus dem Jahre 2011 werde ich nichts ... ich müsse bei Studio4 vorab das WINAVR installieren ... gleich das Studio5 ...
    Hallo Rolf.

    Wie weiter oben geschrieben, war MIR bei den Versionen 5 und - wohl besser - 6 zuviel Overhead. Für meine Arbeiten reicht allemal das 4er und für mich ist dies ein typischer Fall wo weniger (Overhead) gleich mehr (einfacher, übersichtlicher, schneller) ist. Andererseits nutzen andere selbst für kleinere Projekte die 6er Version, die gleich den Compiler mitbringt.

    Ich habe auf meinem aktuellen Rechner, Win7pro64 zuerst den Compiler installiert - WinAVR-20100110 - wenn ich mich recht entsinne. Danach das AVRStudio4. Von der letzten Installation auf WinXP hatte ich diese ?notwendige? Reihenfolge - erst Compiler, dann Studio4 - noch im Kopf.

    Danach ging alles "ganz normal". Wenn Du magst dann versuchs mal so. Zuerst Dein AVRStudio löschen (Systemsteuerung, Programme löschen), Neustart, WinAVR-20100110 holen

    http://sourceforge.net/projects/winavr/files/

    dazu dann gleich das Studio 4; hier gibts direkte Links zu den verschiedenen Versionen, neuen und alten:
    http://www.mikrocontroller.net/artic...inks_Installer
    Wenn ich Dich richtig verstehe, liegt bei Dir der Installationsfile dafür aber schon irgendwo auf Deinem Rechner. Bei der Version 4-18 gibts wohl mehrere Servicepacks, die sind im 4-19 vermutlich schon drin.

    Nun zuerst den Compiler installieren (WinAVR-20100110-install.exe). Ich mach das wohl (immer? notwendig?) mit dem Trick mit der "Rechte Maustaste" und "Als Administrator ausführen".

    Danach das Studio 4 installieren - gleiche Tricks wie oben.

    Danach sollte "es" eigentlich laufen . . . (ohne Gewähr, ohne Haftung wofür auch immer ...)
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. Umstieg von ATMEGA 16 auf 32 Bit AVR
    Von Nomis_Simon im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 2
    Letzter Beitrag: 09.12.2006, 17:42
  2. Umstieg von Bascom auf uisp + avr-gcc
    Von neurix im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 11.11.2005, 12:27
  3. Umstieg von Basic -> Assembler
    Von kaisobczak im Forum AVR Hardwarethemen
    Antworten: 10
    Letzter Beitrag: 14.04.2005, 08:17
  4. Umstieg von 8051 auf AVR
    Von postmann im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 16.02.2005, 08:11
  5. Umstieg von Basic auf C2
    Von Matthias im Forum C-Control II
    Antworten: 13
    Letzter Beitrag: 04.01.2004, 09:27

Berechtigungen

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

12V Akku bauen