Zitat: |
Hatte da heut Nacht auch noch ne Fixe Idee.. MAX232 für die Kommunikation µC <=> CPC.
Evtl. möchte man ja mal bestimmte Relais von nem PC-Tool ansteuern. Oder wie im ELV-Radio Softwareupdates via Bootloader durchführen. |
Zitat: |
du musst davor nur noch unter Eagle "Ratsnest" ausführen. |
G-Punkt hat folgendes geschrieben: |
Danach gehts dann dran die Platine zu ätzen. Nachdem ich sowas noch nie gemacht hab wird das sehr spannend ; ).Felix |
mikado hat folgendes geschrieben: |
Hey hey..
Edit: Hab eben noch was ausprobiert.. LED's zur Status anzeige für die Relais.. Könnte das so funktionieren? |
G-Punkt hat folgendes geschrieben: |
Ich bin grad dabei meinen nächsten Anlauf mit V 2.1 zu bestücken. Dabei ist mir aufgefallen, dass ich die Überspannungsschutz-Diode D12 (15KE22A) scheinbar nicht mitbestellt habe.
Kann ich die durch die - räumlich deutlich kleinere - P 6 KE 15 CA (Art.Nr. 167991 bei Conrad) ersetzen? Zudem: Auf der Conrad-Diode ist keine Markierung. Ist es folglich egal wie rum ich die einbaue? Felix |
mikado hat folgendes geschrieben: |
puh,
und ich hatte schon Angst, dass sich doch n Fehler eingeschlichen hat *G* |
mikado hat folgendes geschrieben: |
hi Gunther,
Nur wo sind die 2 Pads, die unter dem Sub-D waren .. Die sollten als zusätzliche Befestigungspunkte für das optionale USB-Modul dienen. |
Code: |
__________ ___________ __ +12V |_| |_| GND 1ms |
Zitat: |
Ich habe bei ersten Tests den T0 eingang zum Impulse/Sekunde zählen am Geschwindigkeitssignal des Radios (E36 Bj. 95) angeschlossen. Dabei wurde leider nichts gezählt. Einzelne "von Hand" angelegte Impulse kommen allerdings an. Mit dem Multimeter habe ich im Stand an der Signalleitung 12V gemeßen, bei steigender geschwindigkeit sinkend.
|
G-Punkt hat folgendes geschrieben: |
Hallo!
... Zu guter letzt, bin ich auch im Moment von keiner CarPC Software in Gänze überzeugt. ... |
Code: |
#include "cpc-board_v03.h" volatile struct { unsigned hotAndRunning:1; unsigned oldAndRunning:1; } car; //volatile char i=0; //Global variables volatile char * bufferStart; volatile char * bufferEnd; volatile char * bufferPosWr; volatile char * bufferPosRd; volatile char checkVoltage=1; volatile char rcvData[3]={0,0,0}; volatile short checkInterval=1; volatile short checkCounter=0; int main() { int counter=50; short bytesRead=0; char tmp=0; char buffer[100]; //Uart initialisieren UCSRB |= (1<<TXEN) | (1 << RXEN) | (1 << RXCIE); // UART TX einschalten UCSRC |= (1<<URSEL)|(3<<UCSZ0>> 8; UBRRL = UBRR_VAL & 0xFF; uart_puts("Booting...\n"); //initialize recive buffer bufferStart = (char*)malloc(RCVBUFFER); bufferEnd = bufferStart+RCVBUFFER; bufferPosWr = bufferPosRd = bufferStart; //Initialize I/O DDRD = 0b00000000; //PORTD = 0b11111110; DDRB = 0b00111000; //PORTB = 0b00000111; DDRC = 0b00111110; //input: PD1 PD2/INT0 PD3/INT1 PD4 5 6 7 PB0 PB1 PB2 //output: PC5 4 3 2 1 PB3 PB4 PB5 //initalize ADC for reading supply voltage ADCSRA |= (1 << ADFR) | (1 << ADSC); ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADMUX = (1 << REFS0); //initialize Timer0 TCCR0 |= (1 << CS02) | (1 << CS00); TCNT0 = 178; TIMSK |= (1 << TOIE0); //initialize Timer1 TCCR1B |= (1 << CS12) | (1 << CS10); TCNT1 = 0; uart_puts("Bootup completed, enabling interrupts...\n"); //initialize variables car.hotAndRunning = 0; car.oldAndRunning = 0; //enable interrupts sei(); while (1) { //check voltage if(checkVoltage) { //ADCSRA |= (1 << ADEN); tmp = ADC; tmp = ADC; if((ADC < 720) && (counter <50>= 720) counter = 0; car.oldAndRunning = car.hotAndRunning; if(counter < 50) car.hotAndRunning = 1; else car.hotAndRunning = 0; checkVoltage=0; //ADCSRA &= ~(1 << ADEN); } //Change loading-state if(car.hotAndRunning != car.oldAndRunning) { if(car.hotAndRunning) { //activate timer1 interrupt TCNT1 = 0; TIMSK |= (1 << TOIE1); } else { //stop loading PORTC &= ~(1 << PC5); uart_puts("Car status off\n"); } } //Read data from buffer while((bufferPosRd != bufferPosWr) && (bytesRead<3>= 4) && (rcvData[1] <= 7)) { tmp = (1 << (rcvData[1]-3)); if(rcvData[2]) PORTC |= tmp; else PORTC &= ~tmp; } if((rcvData[1] <3> 0)) { tmp = (1 << (rcvData[1]+2)); if(rcvData[2]) PORTB |= tmp; else PORTB &= ~tmp; } bytesRead = 0; } //output voltage value //uart_puts(itoa(ADC, data, 10)); //uart_puts("\n"); if(bufferPosRd != bufferPosWr) continue; if((counter == 50) || (counter == 0)) checkInterval=1200; else checkInterval=1; fallAsleep(); //_delay_ms(5); } return 0; } // bei neueren AVRs andere Bezeichnung fuer die Statusregister, hier ATmega8: int uart_putc(unsigned char c) { if( c == '\n' ) uart_putc( '\r'); while (!(UCSRA & (1<<UDRE))); /* warten bis Senden moeglich */ UDR = c; /* sende Zeichen */ return 0; } /* puts ist unabhaengig vom Controllertyp */ void uart_puts (char *s) { while (*s) { /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */ uart_putc(*s); s++; } } /* Zeichen empfangen */ uint8_t uart_getc(void) { while (!(UCSRA & (1<<RXC))); // warten bis Zeichen verfuegbar return UDR; // Zeichen aus UDR an Aufrufer zurueckgeben } /* Fall asleep */ void fallAsleep(void) { set_sleep_mode(SLEEP_MODE_IDLE); sleep_enable(); sleep_cpu(); sleep_disable(); } //Timer1 Overflow ISR(TIMER1_OVF_vect) { //Timer deaktivieren TIMSK &= ~(1 << TOIE1); //start loading PORTC |= (1 <<PC5>= checkInterval) { checkVoltage=1; checkCounter=0; } } //UART rcv interrupt ISR (USART_RXC_vect) { *bufferPosWr = uart_getc(); if(bufferPosWr == bufferEnd) bufferPosWr = bufferStart; else bufferPosWr++; } |
G-Punkt hat folgendes geschrieben: |
Meinst du, dass die Leiterbahnen dick genug sind? also viel Dampf geht ja nicht drüber. Bei der einfachen Schaltung hab ich einfach mal den Auto-Router loslegen lassen.
|
Zitat: |
A minimum load of 6mA is recommended |
Zitat: |
ie Optokoppler alleine bringen ja auch noch nix, die willst ja auch nicht gleich zerknacken.
|
Zitat: |
Halte ich nicht viel von. 100µF bekommst nicht bipolar und auch nicht spannungsfest genug für den KFZ Bereich. Ausserdem wird das mit entsprechendem Vorwiderstand extrem langsam. |
Zitat: |
Optokoppler halte ich auch für Quatsch. macht doch keinen Sinn, da die Versorgung der Restlichen Schaltung doch wieder am Boardnetz hängt. |