- LiFePO4 Speicher Test         
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

    Praxistest und DIY Projekte
    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
    62
    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 12: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
    62
    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 15:53 Uhr)

  6. #36
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    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 01: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
    62
    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 01: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, 21:39
  2. gewichtsbelastung des rp6 zusätzlich
    Von roboterheld im Forum Robby RP6
    Antworten: 4
    Letzter Beitrag: 28.09.2007, 13:22
  3. Debounce Tasterabfrage + zusätzlich Zeitabfrage = Wie ???
    Von Papsi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 23.09.2007, 14: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, 13:45
  5. Funk-Kamera zusätzlich mit IR-LEDs nachrüsten?
    Von kautz im Forum Sensoren / Sensorik
    Antworten: 10
    Letzter Beitrag: 01.10.2005, 22:45

Berechtigungen

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

Labornetzteil AliExpress