Methode auf avr (7 segment)

OP #2524643
Lesenswert?
• ▲
▼
Hallo zusammen,
um mal in die avr programmierung einzusteigen wollte ich eine nicht 
multigeplexte 7segment anzeige ansteuern.
ich frage mich nur, wie erstelle ich sone art methode (in java heisst 
das so, wie nennt man das in c?)
google hat mir nicht helfen können
OP #2524682
Lesenswert?
• ▲
▼
Thomas Eckmann schrieb:
> Kümmelkorn hochkantspalter schrieb:
>> ich frage mich nur, wie erstelle ich sone art methode
> Das ist ganz einfach.
> Du erstellst eine Funktion, der du die anzuzeigende Zahl übergibst.
> Diese Zahl benutzt du als Index auf eine LuT, die die Bitmuster zur
> Anzeige auf dem Display enthält.
>
> mfg.

Aber wie deklariere/definiere(?) ich im code eine methode?
also als java syntag meine ich sowas:
public void eins()
{
    //mache 1 an
}

wie geht das in c?
(Firma: matzetronics) #2524686
Lesenswert?
• ▲
▼
Was natürlich heisst, das du dir ein System beim Anschliessen der 7 
Segmente ausdenkst. Es ist nicht die dümmste Idee, Segment a an Bit0, 
Segment b an Bit 1 usw. anzuschliessen.
Eine Sieben machst du dann dadurch, das du Bit 0,1 und 2 ansteuerst. 
Eine Eins wäre dann Bit 1 und 2 , usw.
(Firma: matzetronics) #2524710
Lesenswert?
• ▲
▼
Mach dir beispielsweise ein Array, indem die Bitmuster drin sind:
1
uint_8t segmente[10] = 
2
{ 0b00111111, 0b00000110, 0b01011011, .... }
bis zur 9, als Beispiel hab ich mal die Bitmuster für 0 , 1 und 2 
reingeschrieben, wenn du meinen vorigen Vorschlag befolgst.
Dann kannst du eine kleine Funktion machen:
1
void Show(uint8_t Zahl) {
2
PORTC = segmente[Zahl];
3
}
Das setzt voraus das PortC schon auf Ausgang gesetzt ist und da auch das 
Display angeschlossen ist.
Wenn du nun im Hauptprogramm schreibst:
 show(7);
zeigt die Anzeige eine 7-Segment 7.
OP #2524714
Lesenswert?
• ▲
▼
1
#define F_CPU 1000000UL
2

3
#include <avr/io.h>
4
#include <util/delay.h>
5

6

7

8

9
int main (void)
10
{
11
        
12
        //DDRB = 1;
13
    DDRB |= (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7);
14

15
        
16
        for(;;)
17
    {
18
                
19
        PORTB |= (1 << PB0);
20
        _delay_ms(5000);
21
        PORTB |= (1 << PB1);
22
        _delay_ms(5000);
23
        PORTB |= (1 << PB2);
24
        _delay_ms(5000);
25
        PORTB |= (1 << PB3);
26
        _delay_ms(5000);
27
        PORTB |= (1 << PB4);
28
        _delay_ms(5000);
29
        PORTB |= (1 << PB5);
30
        _delay_ms(5000);
31
        PORTB |= (1 << PB6);
32
        _delay_ms(5000);
33
        PORTB |= (1 << PB7);  
34
        _delay_ms(5000);
35
        aus;
36
        _delay_ms(5000);
37
        eins;
38
          
39
        
40
    }
41
    
42
    void eins() 
43
    {
44
      PORTB |= (1 << PB1) | (1 << PB2);
45
    }
46
    
47
    void aus()
48
    {
49
      PORTB &= ~ (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7);
50
    }    
51
      
52
                         
53
}

Nur wie verwende ich die methode jetzt?
so gehts offenbar nicht???
OP #2524733
Lesenswert?
• ▲
▼
ich komm mit dem array nicht klar
1
int main (void)
2
{
3
        
4
        //DDRB = 1;
5
    DDRB |= (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7);
6

7
    uint_8t segmente[3] = { 0b00111111, 0b00000110, 0b01011011}
8
        
9
        
10
    show(1);            
11
          
12
        void Show(uint8_t Zahl) 
13
    {
14
      PORTB = segmente[Zahl];
15
    }
16
}
(Firma: matzetronics) #2524739
Lesenswert?
• ▲
▼
Nee, schreib das Array vor Main() , dann haben auch Unterprogramme was 
davon.
Die Funktion Show() ist so ein Unterprogramm. Aber bitte lies doch mal 
das Tutorial.
Show() würde auch ausserhalb von main() stehen.Globale Variablen und 
Konstanten sollten immer ganz vorne im Programm stehen.
OP #2524749
Lesenswert?
• ▲
▼
1
#define F_CPU 1000000UL
2

3
#include <avr/io.h>
4
#include <util/delay.h>
5

6
uint8_t segmente[3] = { 0b00111111, 0b00000110, 0b01011011};
7

8
void show(uint8_t Zahl) 
9
  {
10
    PORTB = segmente[Zahl];
11
  }
12

13

14

15

16
int main (void)
17
  {
18
    DDRB |= (1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7);
19
        
20
        
21
    show(0);
22
    _delay_ms(5000);
23
    show(1);
24
    _delay_ms(5000);
25
    show(2);                    
26
        
27
  }
danke klappt
doch wie sind die bits zusammengesetzt?
(Firma: matzetronics) #2524767
Lesenswert?
• ▲
▼
Die normale Definition für 7 Segment ist ja
      a
   -------
   |     |
 f |     | b
   |  g  |
   ------
   |     |
 e |     | c
   |  d  |
   -------

Und nun habe ich einfach a mit Bit 0 , b mit Bit 1, c mit Bit2 usw. des 
Portes verbunden.
Mit ein bisschen nachdenken und dieser hilfreichen Grafik kannst du dann 
die anderen Zahlen ergänzen.
Die Notation a la 0b01010101 nennt sich binär und hat in dem Fall den 
Vorteil, die Bits einzeln zu zeigen. Du kannst statt 0b00000110 auch 
0x06 schreiben oder einfach 6 , ist aber hier eher unpraktisch.
Bei der 3 sind also Segment a,b,c,d und g gesetzt, tüftel ein bisschen.
Gast #2524810
Lesenswert?
• ▲
▼
Kümmelkorn hochkantspalter schrieb:
> das turtorial is doch nur für assembler?

Dann ist dieses Tutorial wohl ganz frisch geschrieben?

AVR-GCC-Tutorial: 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

BTW: Nimm dir wirklich erstmal ein normales C Tutorial zu herzen - da 
drin wird definitiv erklärt, wie man eine Funktion (Methode) und Arrays 
erstellt. C ist zwar eine schöne Sprache, aber gerade die Syntax kann 
jemanden zunächst ganz schön verwirren ;-)

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.