- Labornetzteil AliExpress         
Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte
Ergebnis 31 bis 40 von 41

Thema: Zusätzlich zu der M32 noch ein mega8?

  1. #31
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    Anzeige

    E-Bike
    Okay, ich hab es geschafft, alles klappt super

    Nun brauche ich Hilfe bei der Software, wie steuer ich jetzt genau die segmente über i²c, bei dem pcf brauchte ich nur "0b11101011" zu senden, um eine 1 anzeigen zu lassen.


    Belegung:
    Code:
    LOW = AN
    HIGHT = AUS
    
    PC0 - SegA
    PC1 - SegB
    PC2 - SegC
    PC3 - SegD
    
    PD3 - SegE
    PD7 - SegF
    PD6 - SegG
    PD5 - SegDF
    
    PB5 - Anz. 1 
    PB4 - Anz. 2 
    PD2 - Anz. 3 
    PB0 - Anz. 4

    Danke
    Philip

  2. #32
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    So würde ich das angehen, "wert" und "dezimalpunkt" wird später über I2C gesetzt:

    Code:
    // 4 Siebensegmentanzeigen an Mega8                                        mic 3.11.2011
    
    // https://www.roboternetz.de/community/threads/55253-Zusätzlich-zu-der-M32-noch-ein-mega8
    
    // PC0 - SegA         a
    // PC1 - SegB       ------
    // PC2 - SegC      |      |
    // PC3 - SegD    f |      | b
    //                 |  g   |
    // PD3 - SegE       ------
    // PD7 - SegF      |      |
    // PD6 - SegG    e |      | c
    // PD5 - SegDF     |      |
    //                  ------
    // PB5 - Anz. 1       d
    // PB4 - Anz. 2
    // PD2 - Anz. 3
    // PB0 - Anz. 4
    
    #define seg_INIT 	DDRB|=0b00110001; DDRC|=0b00001111; DDRD|=0b11101100; \
       PORTB|=0b00110001; PORTC|=0b00001111; PORTD|=0b11101100;
    
    #define segA_PORT PORTC
    #define segA_PIN PC0
    
    #define segB_PORT PORTC
    #define segB_PIN PC1
    
    #define segC_PORT PORTC
    #define segC_PIN PC2
    
    #define segD_PORT PORTC
    #define segD_PIN PC3
    
    #define segE_PORT PORTD
    #define segE_PIN PD3
    
    #define segF_PORT PORTD
    #define segF_PIN PD7
    
    #define segG_PORT PORTD
    #define segG_PIN PD6
    
    #define segP_PORT PORTD
    #define segP_PIN PD5
    
    #define digit0_PORT PORTB
    #define digit0_PIN PB5
    
    #define digit1_PORT PORTB
    #define digit1_PIN PB4
    
    #define digit2_PORT PORTD
    #define digit2_PIN PD2
    
    #define digit3_PORT PORTB
    #define digit3_PIN PB0
    
    #include <avr/io.h>
    
    // Segmentbelegung aus: http://www.mikrocontroller.net/articles/AVR-Tutorial:_7-Segment-Anzeige
    uint8_t segmente[10] = {
    	0b11000000, //  0: a, b, c, d, e, f
    	0b11111001, //  1: b, c
    	0b10100100, //  2: a, b, d, e, g
    	0b10110000, //  3: a, b, c, d, g
    	0b10011001, //  4: b, c, f, g
    	0b10010010, //  5: a, c, d, f, g
    	0b10000010, //  6: a, c, d, e, f, g
    	0b11111000, //  7: a, b, c
    	0b10000000, //  8: a, b, c, d, e, f, g
    	0b10010000  //  9: a, b, c, d, f, g
    };
    
    uint16_t wert=1234;
    uint8_t dezimalpunkt=4; // 0 bis 3 für Anzeige in Digit, alles andere für aus
    
    void ausgabe(void);
    
    int main(void)
    {
    	seg_INIT;
    	while(1)
    	{
    	   ausgabe();
    	}
    	return (0);
    }
    
    void ausgabe(void)
    {
    	static uint8_t digit=0;
    	uint16_t temp, dez[5]={1,10,100,1000,10000};
    
    	temp = wert / dez[digit+1] * dez[digit+1]; // führende Stellen ausblenden
    	temp = (wert -temp)/dez[digit]; // Ziffer ermitteln
    	temp = segmente[temp]; // Segmentmuster ermitteln
    
    	if(dezimalpunkt == digit) temp &= ~(1<<7); // Dezimalpunkt an diesem Digit anzeigen?
    
    	digit0_PORT &= ~(1<<digit0_PIN); // alle Digits ausschalten
    	digit1_PORT &= ~(1<<digit1_PIN);
    	digit2_PORT &= ~(1<<digit2_PIN);
    	digit3_PORT &= ~(1<<digit3_PIN);
    
    	if(temp & (1<<0)) segA_PORT |= (1<<segA_PIN); else segA_PORT &= ~(1<<segA_PIN);
    	if(temp & (1<<1)) segB_PORT |= (1<<segB_PIN); else segB_PORT &= ~(1<<segB_PIN);
    	if(temp & (1<<2)) segC_PORT |= (1<<segC_PIN); else segC_PORT &= ~(1<<segC_PIN);
    	if(temp & (1<<3)) segD_PORT |= (1<<segD_PIN); else segD_PORT &= ~(1<<segD_PIN);
    	if(temp & (1<<4)) segE_PORT |= (1<<segE_PIN); else segE_PORT &= ~(1<<segE_PIN);
    	if(temp & (1<<5)) segF_PORT |= (1<<segF_PIN); else segF_PORT &= ~(1<<segF_PIN);
    	if(temp & (1<<6)) segG_PORT |= (1<<segG_PIN); else segG_PORT &= ~(1<<segG_PIN);
    	if(temp & (1<<7)) segP_PORT |= (1<<segP_PIN); else segP_PORT &= ~(1<<segP_PIN);
    
    	switch(digit)
    	{
    	   case 0: digit0_PORT |= (1<<digit0_PIN); // Anzeigedigit auswählen
    	   case 1: digit1_PORT |= (1<<digit1_PIN);
    	   case 2: digit2_PORT |= (1<<digit2_PIN);
    	   case 3: digit3_PORT |= (1<<digit3_PIN);
    	}
    
    	digit = (digit+1) & 3; // nächstes Segment auswählen (0-3)
    }
    (natürlich ungetestet)

    Unter der Annahme, dass ein Digit mit high ausgewählt wird.

    Gruß

    mic
    Geändert von radbruch (03.11.2011 um 13:48 Uhr)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #33
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    Danke für deine Antwort ;->

    Werde es gleich testen! Die digits gehen an, wenn der port low ist.

    mfG
    Philip ;->

  4. #34
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Die digits gehen an, wenn der port low ist.
    Code:
    void ausgabe(void)
    {
    	static uint8_t digit=0;
    	uint16_t temp, dez[5]={1,10,100,1000,10000};
    
    	temp = wert / dez[digit+1] * dez[digit+1]; // führende Stellen ausblenden
    	temp = (wert-temp)/dez[digit]; // Ziffer ermitteln
    	temp = segmente[temp]; // Segmentmuster ermitteln
    
    	if(dezimalpunkt == digit) temp &= ~(1<<7); // Dezimalpunkt an diesem Digit anzeigen?
    
    	digit0_PORT |= (1<<digit0_PIN); // alle Digits ausschalten
    	digit1_PORT |= (1<<digit1_PIN);
    	digit2_PORT |= (1<<digit2_PIN);
    	digit3_PORT |= (1<<digit3_PIN);
    
    	if(temp & (1<<0)) segA_PORT |= (1<<segA_PIN); else segA_PORT &= ~(1<<segA_PIN);
    	if(temp & (1<<1)) segB_PORT |= (1<<segB_PIN); else segB_PORT &= ~(1<<segB_PIN);
    	if(temp & (1<<2)) segC_PORT |= (1<<segC_PIN); else segC_PORT &= ~(1<<segC_PIN);
    	if(temp & (1<<3)) segD_PORT |= (1<<segD_PIN); else segD_PORT &= ~(1<<segD_PIN);
    	if(temp & (1<<4)) segE_PORT |= (1<<segE_PIN); else segE_PORT &= ~(1<<segE_PIN);
    	if(temp & (1<<5)) segF_PORT |= (1<<segF_PIN); else segF_PORT &= ~(1<<segF_PIN);
    	if(temp & (1<<6)) segG_PORT |= (1<<segG_PIN); else segG_PORT &= ~(1<<segG_PIN);
    	if(temp & (1<<7)) segP_PORT |= (1<<segP_PIN); else segP_PORT &= ~(1<<segP_PIN);
    
    	switch(digit)
    	{
    	   case 0: digit0_PORT &= ~(1<<digit0_PIN); // Anzeigedigit auswählen
    	   case 1: digit1_PORT &= ~(1<<digit1_PIN);
    	   case 2: digit2_PORT &= ~(1<<digit2_PIN);
    	   case 3: digit3_PORT &= ~(1<<digit3_PIN);
    	}
    
    	digit = (digit+1) & 3; // nächstes Segment auswählen (0-3)
    }
    Werde es gleich testen!
    :)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #35
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    hm... wenn ich es flashen will, kommt: v v v v v v v v !

    ander programme kann ich problemlos flashen.
    Geändert von AsuroPhilip (03.11.2011 um 16:53 Uhr)

  6. #36
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Ärgerlich:
    Bild hier  

    https://www.roboternetz.de/community...ei-Übertragung
    https://www.roboternetz.de/community...h-mehr-möglich
    https://www.roboternetz.de/community...-lebst-du-noch

    Keine Ahnung, wie man das bewerten soll. Mega8 defekt? Oder doch nur Unterspannung am Kontroller?

    [Edit]
    Warum betrifft es nur dieses Programm? Sollte/muss man die asuro-Library einbinden?
    Geändert von radbruch (04.11.2011 um 02:06 Uhr)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #37
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    Mega8 defekt?
    Denke schon.... Nur blöd das ich keine sockel mehr hatte ;->

    Warum betrifft es nur dieses Programm? Sollte/muss man die asuro-Library einbinden?


    Klappt nur bei den etwas kleineren programmen! nein muss mal eigt. nicht!




  8. #38
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Doppelt ärgerlich:

    Bild hier  

    btw: Nie im Leben würde ich einen asuro-Mega8 ohne Sockel verwenden. Schande über dich...
    (Was ist das denn da unten rechts?)
    Geändert von radbruch (04.11.2011 um 02:50 Uhr)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  9. #39
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    Wieso? Das board funktioniert noch!

  10. #40
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    btw: Nie im Leben würde ich einen asuro-Mega8 ohne Sockel verwenden. Schande über dich...
    ICH HATTE KEINE MEHR!!!

    Das unten Rechts ist einfach usb->uart, zum programmiern. Habe keine µC mehr, deswegen bestell ich mir jetzt wieder welche bei Reichelt und ein isp-programmer.

Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte

Ähnliche Themen

  1. Noch ein Clone...
    Von kritias im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 3
    Letzter Beitrag: 24.04.2011, 22:39
  2. gewichtsbelastung des rp6 zusätzlich
    Von roboterheld im Forum Robby RP6
    Antworten: 4
    Letzter Beitrag: 28.09.2007, 14:22
  3. Debounce Tasterabfrage + zusätzlich Zeitabfrage = Wie ???
    Von Papsi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 23.09.2007, 15:52
  4. LCD an einen Mega8 der an einem Mega8 hängt wie?
    Von Naxos im Forum AVR Hardwarethemen
    Antworten: 9
    Letzter Beitrag: 10.03.2006, 14:45
  5. Funk-Kamera zusätzlich mit IR-LEDs nachrüsten?
    Von kautz im Forum Sensoren / Sensorik
    Antworten: 10
    Letzter Beitrag: 01.10.2005, 23:45

Berechtigungen

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

LiFePO4 Speicher Test