- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 41

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

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    Juhuu, Ich kann wieder löten!

    Hm... ich benutze ja pnp-transistoren, kann ich die weiterbenutzen? Kann der mega8 negative spannung auf ein port setzen (-5V) ?
    Geändert von AsuroPhilip (01.11.2011 um 18:27 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.093
    Ein µC kann nur 0V oder VCC (z.B. bei 5V Versorgung am Ausgang 5V) schalten. Du kannst keine negative Spannung schalten. Mit einigen Tricks könntest du damit die negative Spannung schalten. Wenn man das GND Potential (vom µC) auf -5V legt und VCC an 0V. Dadurch ist es gegen GND vom µC die Spannung immer positiv. Will man auch noch +5V Schalten muss man mit einem Transistor oder Fet schalten (das ist aber gegen -5V gemessen).
    Eine weitere Möglichkeit wäre mit Optokoppler zu arbeiten. Mit dem µC steuert man die Led des Optokopplers an. Am Ausgang des Optokopplers hat man ein Potentialunabhängigen Schalter. Dadurch kann man auch eine negative Spannung schalten.

    MfG Hannes

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    ...oder ich versuche morgen mal npn-transistoren
    Geändert von AsuroPhilip (01.11.2011 um 18:27 Uhr)

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    warum funktioniert das nicht mir npn-transistoren??

    base - an µC
    collector - an +5V
    emitter - an segmentanzeige

    mit pnp funktioniert das wunderbar!

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    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

  6. #6
    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!

  7. #7
    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 ;->

Ä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
  •  

12V Akku bauen