Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
Ik had laatst EXACT hetzelfde op mijn dc/dc converterprojectje - ik had het bijna op GoT gepost toen ik erachter kwam wat het probleem was.
Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog
Maar, hangt er niet een draadje te weinig aan? Ik tel 5 draadjes, dit zouden er toch minimaal 6 moeten zijn?
D4 t/m D7
En
RS
Verwijderd
En volgens mij zou hij dan al moeten initialiseren (rij met zwarte blokjes)
Volgens mij moet je dan nog iets doen met RS voordat hij die blokjes aangeeft...ThinkPadd schreef op vrijdag 28 mei 2010 @ 08:55:
Ik heb niks qua data er aan hangen, alleen spanning (5V), GND en contrast, meer niet.
En volgens mij zou hij dan al moeten initialiseren (rij met zwarte blokjes)
Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog
Je kunt dus nog overwegen om alle andere pinnen aan GND te hangen en dan voeding+contrast eraan hangen...
Verder zou het aan de ground hangen van de E genoeg moeten zijn om wat voor troep dan ook op het display te voorkomen. Ik blijf er echter bij: dit display is met 99.999% zekerheid dood te verklaren.
[ Voor 35% gewijzigd door Sprite_tm op 28-05-2010 10:54 ]
Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog
Daar schiet je automagisch in als je verkeerd initialiseert (bij mij gebeurde het doordat ik na het zeggen dat ik in 4-bit mode zat, vergat om een keer een word te verzenden). Maargoed, het probleem van TP lijkt er zo erg op dat ik eraan moest denken.


Dit is een ontvanger voor de philips living colors zodat je gewone LED-Strips ook samen kan aansturen met de philips afstandsbediening en de lampen zelf.
Het bevat 0402 weerstanden en condensatoren.
Nuttig? Nee. Leuk, leerzaam? Zeer zeker!
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
Leuk!LED-Maniak schreef op vrijdag 28 mei 2010 @ 17:18:
Omdat ik graag uitdagingen zoek, hier weer een projectje van mij:
[afbeelding]
[afbeelding]
Dit is een ontvanger voor de philips living colors zodat je gewone LED-Strips ook samen kan aansturen met de philips afstandsbediening en de lampen zelf.
Het bevat 0402 weerstanden en condensatoren.
Nuttig? Nee. Leuk, leerzaam? Zeer zeker!
Ik heb een PIC18F4520 die vrij vol zit met C18 gecompileerde C-code. Hij compileert zonder enige problemen. Alleen als ik hem run doen de PORTB poorten heel iets anders dan hij zou moeten doen. Hoe in godsnaam kan zoiets?
Stack overflow ? Ik weet niet of zo'n PIC18 veel verschilt van een PIC16 maar een PIC16 heeft maar 16 stackposities en daar ga je retesnel overheensimplendi schreef op zaterdag 29 mei 2010 @ 23:07:
Ik heb nu toch iets raars![]()
Ik heb een PIC18F4520 die vrij vol zit met C18 gecompileerde C-code. Hij compileert zonder enige problemen. Alleen als ik hem run doen de PORTB poorten heel iets anders dan hij zou moeten doen. Hoe in godsnaam kan zoiets?
If you do not change direction, you may end up where you are heading
Instelling van je programmer? Een soort gelijk probleem heb ik ook een keer gehad: compileren en uploaden naar een 18F ging goed, vervolgens deed het programma niet wat het moest doen (ook met portA en portB). Het bleek dat de programmer niet geschikt was voor 18F-controllers. Maar er was geen warning hierover gegenereerd...simplendi schreef op zaterdag 29 mei 2010 @ 23:07:
Ik heb nu toch iets raars![]()
Ik heb een PIC18F4520 die vrij vol zit met C18 gecompileerde C-code. Hij compileert zonder enige problemen. Alleen als ik hem run doen de PORTB poorten heel iets anders dan hij zou moeten doen. Hoe in godsnaam kan zoiets?
Jaja, erg leuk! Totdat je natuurlijk 10Volt rated tantaal op de plek zet waar hij 12Volt voor de kiezen krijgt(wie gebruikt er nog tantaal tegenwoordig...).
Het resultaat was vonken, een knal en nog meer brand. Hopelijk doet de rest het nog:
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
Met het huidige aanbod van cheap X7R keramisch en low-ESR low-profile aluminium elektrolytisch, conductive polymer en proadlizers voor het echte high-performancegebied is tantaal echt iets van het verleden.
als je 2x 100u/10V nodig hebt is tantaal toch wat makkelijker te vinden, en goedkoper dan keramisch.
Bovendien was het zelfs de aanbevole keuze in de design guidelines van National Semiconductor.
Denk trouwens niet dat ze in dit ontwerp problemen zullen leveren.
Het zijn 10V uitvoeringen op de uitgang van een 12V->5V voeding waar secundair < 1A loopt.
Voeding heeft een ook een slowstart van enkele ms en een inrushcurrent limiter.
Maarja, NI is wel een van de bedrijven die nog een hoop tantaal aanraadt, ook met hun PFM en hysteretische controllers. Tantaal is ook echt nog wel significant goedkoper dan bijvoorbeeld Taiyo Yuden high-capacitance X7R keramisch spul. Damn, je betaalt voor die 22/33/47uF keramische caps meer dan een euro per stuk!
Iemand die hier nog antwoord op kan/wil geven?maikel schreef op donderdag 27 mei 2010 @ 21:00:
[...]
Ik heb nu ook pin 10 van de ULN2803 maar aangesloten.Deze hangt nu aan +12V.
Het scheelt al een hoop: rood en groen gaan wel helemaal uit, alleen blauw blijft nog een klein beetje branden. Ik heb de scoop eraan gehangen en de uitgangen van de microcontroller lijken gewoon goed te functioneren. Het gaat dus mis na de ULN2803, lijkt het. Ik heb daarvan drie ingangen op de microcontroller aangesloten, de rest van de ingangen hangt aan GND. Blauw hangt aan pin 18. Volgens de scoop is die uitgang op geen enkel moment 12V, ik zie daar altijd iets wat op een opgaande flank lijkt. Daar komt ook verstoring in als ik een andere kleur ophoog.
Moeten overigens de GNDs allemaal aan elkaar hangen? De microcontroller krijgt zijn voeding uit de
USB->RS485-converter en dus uit een USB-poort, terwijl de LED-strip en ULN2803 hun voeding krijgen uit een labvoeding. Lijkt me haast wel, aangezien het anders niet lekker werkt. Maar ik blijf het toch spannend vinden om m'n labvoeding zomaar op een USB-poort aan te sluiten, ook al is het alleen de GND.
Heb je ondertussen wél de massa aangesloten en nog steeds het probleem? Haal dan eens de µ-controller los van de ULN, en hang de ULN-input hard aan de min van de ULN. Licht er dan nog steeds iets op, dan heb je of iets verkeerd aangesloten, of je ziet een minieme lekstroom. In dit geval zou een weerstand parallel aan de led het probleem moeten oplossen. Probeer het eens met iets van 4.7k-10k, komt niet zo nauw.
I fell with my reet in the prikkeldreed. How do I frommel my hand in the cookiestrommel? The sun is shining over het randje van de heining. I'm shocking klem between de deuren van de tram.
Zojuist heb ik even de uitgang van de PWM-timer los gehaald en toen ging blauw ook uit. Nu heb ik even in de datasheet zitten lezen en mogelijk is dit het probleem:
If the OCR2 is set equal to BOTTOM, the output will be a narrow spike for each MAX+1 timer clock cycle.
Dat treedt dus op in 'Fast PWM mode'. Misschien toch bij '0' de pin gewoon op 'input' zetten, dan moet het volgens mij opgelost zijn.
[edit]
Dat werkt dus wel, maar ik vind het wel een beetje een hack. Is er een nettere manier?
[ Voor 9% gewijzigd door maikel op 31-05-2010 23:27 ]
Zie ik dat met handmatig door de kleurencirkel heengaan, de rode led niet wil faden maar gewoon aan/uit gaat. ff potmeter omdraaien: zelfde...hmmm
Rode led verwisselen met groene: zelfde, maar nu krijg ik de rode led niet meer uit?!!
rood = 1.8v
groen = 3.3v
rood+100Ohm+5v > 40mA....ATtiny2313 pinnetje naar de kloten
Hopelijk alleen dat pinnetje, de rest van de port lijkt het nog te doen. Morgen maar ff de code aanpassen en een aantekening maken, FU!
Ctrl+k
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
| #define F_CPU 3686400 #include <stdlib.h> #include <avr/io.h> #include <avr/interrupt.h> #include <inttypes.h> #include <util/delay.h> #include <string.h> void blink(unsigned char c) { PORTC = ((c != 'r') << PC0 | (c != 'g') << PC1 | (c != 'b') << PC2 | 0 << PC5); _delay_ms(100); PORTC = (1 << PC0 | 1 << PC1 | 1 << PC2 | 0 << PC5); } void SetR( int value ) { OCR1A = (2.55 * value); } void SetG( int value ) { OCR1B = (2.55 * value); } void SetB( int value ) { if (value > 0) { DDRB = (1 << PINB1) | (1 << PINB2) | (1 << PINB3); OCR2 = (2.55 * value); } else { DDRB = (1 << PINB1) | (1 << PINB2) | (0 << PINB3); } } int r; int g; int b; void setColor(unsigned char c) { PORTC = ((c != 'r') << PC0 | (c != 'g') << PC1 | (c != 'b') << PC2 | 0 << PC5); } /************************************************************************* Initialise PWM-timers **************************************************************************/ void PWM_Init() { DDRB = (1 << PINB1) | (1 << PINB2) | (1 << PINB3); TCNT1 = 0x00; TCCR1A = (1 << FOC1A) | (1 << FOC1B) | (1 << COM1A1) | (1 << COM1B1) | // (1 << COM1A0) | // (1 << COM1B0) | (1 << WGM12) | (1 << WGM10); TCCR1B = (1 << CS10); TCCR2 = (1 << FOC2) | (1 << COM21) | (1 << WGM20) | (1 << WGM21) | (1 << CS00); } /************************************************************************* Enable RS485 transmissionin **************************************************************************/ inline void RS485_TE() { PORTD |= _BV(PD2); } /************************************************************************* Enable RS485 reception **************************************************************************/ inline void RS485_RE() { PORTD &= ~_BV(PD2); } /************************************************************************* Initialise serial port **************************************************************************/ void USART_Init(int baudrate) { // Set baud rate int rate = F_CPU/16/baudrate - 1; // Set baud rate UBRRH = (unsigned char)(rate>>8); UBRRL = (unsigned char)rate; // Set frame format to 8 data bits, no parity, 1 stop bit UCSRC = (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); // Enable receiver and transmitter UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN); RS485_RE(); } void USART_Transmit( unsigned char data ) { //Wait for empty transmit buffer while ( !( UCSRA & (1<<UDRE)) ) { } RS485_TE(); // Put data into buffer, sends the data UDR = data; } void USART_SendString( char str[255] ) { int i = 0; while (i < 255 && str[i] != '\0') { USART_Transmit(str[i++]); } } /************************************************************************* Serial interrupt, whenever we receive a byte we get an interrupt **************************************************************************/ ISR(USART_RXC_vect) { unsigned char color; color = UDR; // Fetch the recieved byte value into the variable "ByteReceived" USART_Transmit( color ); // Echo back the received byte back to the computer if (color == 'R' && r < 100) { r += 10; } if (color == 'r' && r > 0) { r -= 10; } if (color == 'G' && g < 100) { g += 10; } if (color == 'g' && g > 0) { g -= 10; } if (color == 'B' && b < 100) { b += 10; } if (color == 'b' && b > 0) { b -= 10; } } ISR(USART_TXC_vect) { RS485_RE(); } int rnd( int max ) { return rand() / (RAND_MAX / max + 1); } int main() { r = 0; g = 0; b = 0; DDRC=0xff; // output port PORTC = (1 << PC0 | 1 << PC1 | 1 << PC2 | 0 << PC5); DDRD = (1<<PD0); PWM_Init(); SetR(0); SetG(0); SetB(0); USART_Init(9600); //activate interrupts sei(); while (1) { SetR(r); SetG(g); SetB(b); _delay_ms(100); } } |
Het is dus de bedoeling dat ik vanaf de PC een teken stuur, waarmee een van de drie kleuren feller/minder fel wordt. Dat werkte nagenoeg perfect voordat ik de echo had toegevoegd. Nu de echo erin zit, lijkt het alsof niet elk teken dat ik stuur, goed aan komt: de RGB-LED reageert maar af en toe en ook de echo komt maar af en toe terug (dat gebeurt dan wel tegelijk).
Wat me opvalt is dat ik, naast de echo, ook heel vaak nullen binnen krijg op de PC. Wat zou hier de oorzaak van kunnen zijn? Het lijkt me dat het versturen van die nullen de ontvangst blokkeert of zo.
Nu nog uitvogelen wat hij dan precies terug stuurt..
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
Raar, op het eerste gezicht zie ik niks mis. Een paar kleine dingetjes:maikel schreef op dinsdag 01 juni 2010 @ 01:39:
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59void USART_Transmit( unsigned char data ) { //Wait for empty transmit buffer while ( !( UCSRA & (1<<UDRE)) ) { } RS485_TE(); // Put data into buffer, sends the data UDR = data; } void USART_SendString( char str[255] ) { int i = 0; while (i < 255 && str[i] != '\0') { USART_Transmit(str[i++]); } } /************************************************************************* Serial interrupt, whenever we receive a byte we get an interrupt **************************************************************************/ ISR(USART_RXC_vect) { unsigned char color; color = UDR; // Fetch the recieved byte value into the variable "ByteReceived" USART_Transmit( color ); // Echo back the received byte back to the computer if (color == 'R' && r < 100) { r += 10; } if (color == 'r' && r > 0) { r -= 10; } if (color == 'G' && g < 100) { g += 10; } if (color == 'g' && g > 0) { g -= 10; } if (color == 'B' && b < 100) { b += 10; } if (color == 'b' && b > 0) { b -= 10; } }
- je zou kunnen proberen in USART_Transmit nog een keer te forceren dat hij wacht tot de transmit buffer leeg is (zelfde while-loopje). Maar ik weet eigenlijk wel zeker dat dit geen zin heeft.
- SendString is een beetje vaag, dat zou ik met een pointer oplossen want nu dimension je in de stack een mega-super-duper-array die al je geheugen opslokt. Het kan veel makkelijker. lolcode:
1
2
3
| gooiallesweg StuurOnderbroek(persoonlijkheid * Onderbroek){
terwijl(*Onderbroek) universeleserieleasynchroneontvangverzend_verzend(*Onderbroek++);
} |
- Je ontvangt en verzendt direct achter elkaar in je receive-interrupt. Daar kan nog best eens de fout zitten. Je USART_TXC_vect is concurrent met USART_RXC_vect. AVRs hebben volgens mij (kijk het even na) maar één interrupt pointer, dus alles wat aangeroepen wordt tijdens interrupt A wordt gewoon niet uitgevoerd.
- Het is overzichtelijker om je ontvangen karakters in een switch statement te gooien. lolcode:
1
2
3
4
| schakel(ontvangenPersoonlijkheid){
zaak 'b': als(meuk) meuk; gakapot;
zaak 'g': etc...
} |
De 'SendString' gebruik ik op dit moment niet. BIj het opschonen van de code was ik die vergeten weg te halen en zoals jij 'm geeft, heb ik 'm inderdaad al vaker gezien. (maar dan wat minder leuk
En zou je je punt over die interrupt-pointers nog iets eenvoudiger kunnen uitleggen? Ik lees het nu als: als USART_TXC_vect wordt uitgevoerd, wordt USART_RXC_vest genegeerd.
Die switch zal ik inderdaad nog toevoegen.
Die interrupts: als één interrupt wordt gecalled, bezig is, en ondertussen een andere wordt gecalled negeert hij die tweede volgens mij, althans, ik kan me zoiets herinneren. Dat is een fundamenteel verschil met bijv. ARM7 die een vectored interrupt controller heeft, die interrupts achter elkaar zet in volgorde van prioriteit als er eentje wordt aangeroepen terwijl een andere nog loopt.
Een beetje C/C++ is wel te doen ja, maar straks wil ik wat meer data gaan sturen en moet ik met strings gaan werken. En pointers zijn eng!
Toch eens proberen of ik Visual C++ aan de praat krijg voor mijn code. C++ is al wat makkelijker dan C en al helemaal met Visual Studio.
En dit is slechts een beginnetje he, wie weet hoe gigantisch dit project uiteindelijk gaat worden.
Maar over je interrupts: in de RXC ga je wat transmitten, en daarna ga je nog zitten te klooien met een hoop (moeilijk!) branches. In de tijd dat de MCU dat aan het doen is, kan hij best de TXC interrupt willen afvuren, terwijl hij nog bezig is met RXC.
En het objectgeorienteerde van C++ vind ik wel prettig, aangezien ik zo in C# ook werk. Zeker als het project groter gaat worden.
Ah, nu snap ik 't inderdaad van die RXC. Eigenlijk moet ik dus alleen die variabele vullen en daar in de main-loop iets mee doen in plaats van in de interrupt-handler. Ik zal dat vanavond eens gaan proberen.
Je kunt beter in een interupt handler een statusbit activeren,
waarmee in de mainloop een functie wordt uitgevoerd.
Edit: zoals je zelf nu zegt inderdaad.
Het is altijd beter om te voorkomen dat er uitgebreide code in een interupt komt te staan.
[ Voor 7% gewijzigd door M a r c o op 01-06-2010 10:36 ]
Verwijderd
Gebruik dan Eclipse met avr-eclipse. VSmaikel schreef op dinsdag 01 juni 2010 @ 10:35:
In Visual Studio gaat het mij voornamelijk om de IntelliSense, code completion, etc. Dat mis ik in AVR Studio.
Bekend probleem als je van de PC af komt en dus gewend bent om callbacks (in feite softwaregestuurde interrupts) te schrijven. Vooral Windows-programmeurs hebben er een handje in om hele lappen code in callbacks/interrupt-handlers te gooien.M a r c o schreef op dinsdag 01 juni 2010 @ 10:35:
Het is altijd beter om te voorkomen dat er uitgebreide code in een interupt komt te staan.
Op een PC met een onderliggend OS en een kernel die dat weer netjes indeelt is dat meestal niet zo'n probleem, maar op een embedded platform waar elke CPU-cycle telt moet je daar wel op letten. Met lange interrupt-handlers krijg je ook bijvoorbeeld het probleem van re-entrantie, d.w.z. dat de interrupt opnieuw wordt aangeroepen terwijl de afhandeling nog bezig is.
Tip: Probeer voor je eerste projecten op AVR niet alles asynchroon te willen doen. De Windows API doet daar IMO in verhouding té makkelijk over, waardoor je erg slordig gaat programmeren.
Zet het daar maar neer! -- It's time to party like it's 1984 -- Soundcloud
De codes voor de afstandsbediening van een livingcolors lamp zijn natuurlijk al breeduit bekend. De codes van de lamp zelf zijn echter nergens te vinden en zonder die codes zijn de helft van de functies niet beschikbaar. Dus wat doe je? Lamp slopen!
Ik heb de codes gevonden die de afstandsbediening terug verwacht van de living colors lamp en nu kan ik dus ook mijn eigen led-strips laten reageren op de afstandsbediening waarbij 98% van de functies nu werken ipv <50% voorheen
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
| #define F_CPU 3686400 #include <stdlib.h> #include <avr/io.h> #include <avr/interrupt.h> #include <inttypes.h> #include <util/delay.h> #include <string.h> /************************************************************************* Global variables **************************************************************************/ char receivedByte; int r; int g; int b; /************************************************************************* Functions **************************************************************************/ void SetR( int value ) { OCR1A = (2.55 * value); } void SetG( int value ) { OCR1B = (2.55 * value); } void SetB( int value ) { if (value > 0) { DDRB = (1 << PINB1) | (1 << PINB2) | (1 << PINB3); OCR2 = (2.55 * value); } else { DDRB = (1 << PINB1) | (1 << PINB2) | (0 << PINB3); } } /************************************************************************* Initialise PWM-timers **************************************************************************/ void PWM_Init() { DDRB = (1 << PINB1) | (1 << PINB2) | (1 << PINB3); TCNT1 = 0x00; TCCR1A = (1 << FOC1A) | (1 << FOC1B) | (1 << COM1A1) | (1 << COM1B1) | // (1 << COM1A0) | // (1 << COM1B0) | (1 << WGM12) | (1 << WGM10); TCCR1B = (1 << CS10); TCCR2 = (1 << FOC2) | (1 << COM21) | (1 << WGM20) | (1 << WGM21) | (1 << CS00); } /************************************************************************* Enable RS485 transmissionin **************************************************************************/ inline void RS485_TE() { PORTD |= _BV(PD2); } /************************************************************************* Enable RS485 reception **************************************************************************/ inline void RS485_RE() { PORTD &= ~_BV(PD2); } /************************************************************************* Initialise serial port **************************************************************************/ void USART_Init(int baudrate) { // Set baud rate int rate = F_CPU/16/baudrate - 1; // Set baud rate UBRRH = (unsigned char)(rate>>8); UBRRL = (unsigned char)rate; // Set frame format to 8 data bits, no parity, 1 stop bit UCSRC = (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); // Enable receiver and transmitter UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN); RS485_RE(); } void USART_Transmit( unsigned char data ) { //Wait for empty transmit buffer while ( !( UCSRA & (1<<UDRE)) ) { } RS485_TE(); // Put data into buffer, sends the data UDR = data; } void SendString(char *str) { while(*str) { USART_Transmit(*str++); } } /************************************************************************* Interupts **************************************************************************/ // Receive complete ISR(USART_RXC_vect) { receivedByte = UDR; // Fetch the recieved byte value into the variable "receivedByte" } // Transmit complete ISR(USART_TXC_vect) { RS485_RE(); } int main() { receivedByte = ' '; r = 0; g = 0; b = 0; DDRC=0xff; // output port PORTC = (1 << PC0 | 1 << PC1 | 1 << PC2 | 0 << PC5); DDRD = (1<<PD0); PWM_Init(); SetR(0); SetG(0); SetB(0); USART_Init(9600); //activate interrupts sei(); SendString("Ready..."); while (1) { if (receivedByte != ' ') { switch (receivedByte) { case 'R': { if (r < 100) r += 10; break; } case 'G': { if (g < 100) g += 10; break; } case 'B': { if (b < 100) b += 10; break; } case 'r': { if (r > 0) r -= 10; break; } case 'g': { if (g > 0) g -= 10; break; } case 'b': { if (b > 0) b -= 10; break; } } SetR(r); SetG(g); SetB(b); USART_Transmit( receivedByte ); // Echo back the received byte back to the computer receivedByte = ' '; } } } |
De string 'Ready...' komt netjes binnen, maar daarna lijkt de microcontroller nergens meer op te reageren. Een enkele keer is het me wel gelukt een 'R' te sturen, de LED-strip is ook op rood gegaan en ik kreeg een 'R' terug. Maar dat alles was pas na een hele tijd na het verzenden.
Zie ik nog iets over het hoofd?
1
| volatile char receivedByte; |
Volatile zorgt ervoor dat de compiler weet dat de variabele door 'externe oorzaken' kan veranderen. Het is op dit moment namelijk mogelijk dat het programma dat de compiler genereerd uit dit deel:
1
2
3
4
5
6
7
8
9
10
| while (1) { if (receivedByte != ' ') { switch (receivedByte) { ..... } } } |
in de microcontroller iets wordt als:
1
2
3
4
5
| -Haal de data uit geheugenadres van 'receiveddata' naar register 16 (R16) :vergelijk -Kijk of R16 gelijk is aan ' ' -Zo ja, ga naar :vergelijk -Zo nee, Ga naar een deel van de code dat de switch voor zijn rekening neemt |
Als de interrupt dan een wijziging maakt naar het geheugenadres van Receivedbyte zal dit niet in R16 terecht komen, en de if in de while-lus dus nooit resultaat opleveren.
Ik heb in de main-loop en de receivedByte-check ook een stukje staan die een LED even laat knipperen, zodat ik zie wanneer dat gedeelte wordt uitgevoerd en die knippert ook steeds wanneer ik de nullen binnen krijg. Het lijkt er dus op dat receivedByte geen spatie is.
[edit]
Ik heb die spatie voor receivedByte nu vervangen door 0x0 en dat lijkt beter te werken (al snap ik niet wat dat uit zou maken). Maar nog steeds lijkt niet elk teken aan te komen. Ik moet steeds enige tijd wachten om het volgende teken te kunnen sturen.
Ik heb nu ook de cases uitgebreid met:
1
2
3
4
5
6
7
8
| char buf[5] = ""; case 'R': { if (r < 100) r += 10; itoa(r, buf, 10); SendString(strcat("Red increased to: ", buf)); break; } |
Nu krijg ik dus ook de status van de gewijzigde kleur terug. Dat werkt wel, alleen wordt de zin elke keer verlengd met de nieuwe waarde. Dus:
- Red increased to: 10
- Red increased to: 1020
- Red increased to: 102030
Waarom is dat? Die buffer is niet groter en die string is geen variabele. (ik vrees nu al voor alle andere string-bewerkingen die ik nodig ga hebben
[ Voor 50% gewijzigd door maikel op 01-06-2010 22:19 ]
Iets anders dat het mogelijk kan zijn, op het moment dat je tekens stuurt zet je de RS485 converter op versturen. Op dat moment verstuurt de RS485 converter geen data naar de microcontroller, maar de RX pin wordt ook niet keihard hoog of laag gemaakt. Mogelijk wordt er een beetje ruis ontvangen, waardoor de microcontroller denkt een teken ontvangen te hebben (wat weer geecho'd wordt, enz)maikel schreef op dinsdag 01 juni 2010 @ 21:48:
[edit]
Ik heb die spatie voor receivedByte nu vervangen door 0x0 en dat lijkt beter te werken (al snap ik niet wat dat uit zou maken). Maar nog steeds lijkt niet elk teken aan te komen. Ik moet steeds enige tijd wachten om het volgende teken te kunnen sturen.
Je zou eens kunnen proberen om het ontvangen op de microcontroller helemaal uit te schakelen zolang er verstuurd wordt.
De enable/disable-code heb ik nu aangepast naar:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| /************************************************************************* Enable RS485 transmissionin **************************************************************************/ inline void RS485_TE() { PORTD |= _BV(PD2); UCSRB=(0<<RXCIE)|(1<<TXCIE)|(0<<RXEN)|(1<<TXEN); } /************************************************************************* Enable RS485 reception **************************************************************************/ inline void RS485_RE() { PORTD &= ~_BV(PD2); UCSRB=(1<<RXCIE)|(0<<TXCIE)|(1<<RXEN)|(0<<TXEN); } |
Maar het probleem is nog hetzelfde.
Getallen zijn irritant, maar het heeft nut (performance-wise) om daar de moeilijke route te nemen: sprintf en aanverwante constructies zijn onnoemelijk traag, en zeker als je dat in een interrupt gooit gaan er baby's dood. Je kunt beter je getal hakselen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| betrouwbaar meuk = een_of_ander_getal; persoonlijkheid a = meuk / 10000; verstuur_persoonlijkheid(a); meuk -= (meuk / 10000) * 10000; a = meuk / 1000; verstuur_persoonlijkheid(a); meuk -= (meuk / 1000) * 1000; a = meuk / 100; verstuur_persoonlijkheid(a); meuk -= (meuk / 100) * 100; a = meuk / 10; verstuur_persoonlijkheid(a); meuk -= (meuk / 10) * 10; verstuur_persoonlijkheid((persoonlijkheid) meuk); |
werkt voor elke unsigned int, kan evt. in een loopje gezet worden als je dat leuk vindt. Voor signed kun je zelf wel wat bedenken. Het is lelijke code, ik weet het, maar zodra je tegen allerlei vage resource-gerelateerde problemen aanloopt heeft het nut even helemaal terug te gaan naar de meest basic code. Pas als je hele programma bestaat uit simpele assignments en statements met minder dan 4 variabelen (=8 stack-bytes, plus genoeg buffer voor een register, extra instructies of ghosts) kun je echt een stack overflow of trage standaardfuncties uitsluiten.
Ik ben er trouwens helemaal niet zeker van dat een stack overflow je probleem is, dus zoek vooral zelf ook verder. Dit is maar een methode om van printfuncties af te komen. stdio/string hebben mij meer dan eens de das omgedaan, vandaar dat ik erover begin.
Verwijderd
AVR heeft zelf AVR Studio ter download op de site staan. Het is best een aardige interface die ook een aantal programmers ondersteunt.
Het tv signaal hier in de flat schijnt ook wel zwakt te zijn.
Verwijderd
Dat te zwak signaal zal waarschijnlijk wel de oorzaak van je ruis zijn. De kans bestaat dat met een andere tv hetzelfde probleem optreed. Misschien ergens een verzwakking in je kabel.Mr_gadget schreef op donderdag 03 juni 2010 @ 19:20:
Ik heb hier nog een oude crt tv staan die heel erg sneeuwt. Iemand ervaring met het repareren van tv's? Ik heb wel even zitten kijken maar zaten geen bolle condensatoren e.d. op de printplaat. Is dit nog te verhelen of kan ik beter voor een externe tuner gaan (er zit een keer scart op)
Het tv signaal hier in de flat schijnt ook wel zwakt te zijn.
Verwijderd
SEI/ CLI, zie: https://docs.google.com/v...0jdvWOGDTA5Pd9xosPXW1Ni6Assj3gohan schreef op dinsdag 01 juni 2010 @ 09:41:
Die interrupts: als één interrupt wordt gecalled, bezig is, en ondertussen een andere wordt gecalled negeert hij die tweede volgens mij, althans, ik kan me zoiets herinneren. Dat is een fundamenteel verschil met bijv. ARM7 die een vectored interrupt controller heeft, die interrupts achter elkaar zet in volgorde van prioriteit als er eentje wordt aangeroepen terwijl een andere nog loopt.
echter, volgens mij negeer je daarmee simpelweg de interrupt lijn, op het moment dat je dan je interrupts, aan het einde van je ISR, weer aan zet....
schiet niet op, daarom moet je aan het einde van je interrupt altijd de interrupt lijn resetten (OUT naar de juiste poort), althans, zo werkt het op de Z80 (8 bit CPU van onder andere de gameboy en ti-83+/84)
Je kabelaar bellen? Volgens mij hoor je iets van 75 dbuv op je AOP te hebben. Als je dat niet haalt moet je kabelaar het fixen, en als dat wel goed is zul je met versterkers aan de haal.Mr_gadget schreef op donderdag 03 juni 2010 @ 19:20:
Ik heb hier nog een oude crt tv staan die heel erg sneeuwt. Iemand ervaring met het repareren van tv's? Ik heb wel even zitten kijken maar zaten geen bolle condensatoren e.d. op de printplaat. Is dit nog te verhelen of kan ik beter voor een externe tuner gaan (er zit een keer scart op)
Het tv signaal hier in de flat schijnt ook wel zwakt te zijn.
Wel eerst uitsluiten of die tv zelf niet het issue is, niet elke tv heeft dezelfde gevoeligheid op de tuner. Uiteraard kan ie ook gewoon stuk zijn. Repareren... mjah, een andere crt halen op marktplaats is sneller dan moeite stoppen in zo'n ding
Als er bij een AVR een interrupt wordt getriggert en uitgevoerd en er komt een andere dan blijft de interrupt flag staan. Vervolgens is na het afhandelen van de huidige interrupt de volgende aan de beurt.Verwijderd schreef op donderdag 03 juni 2010 @ 20:14:
[...]
SEI/ CLI, zie: https://docs.google.com/v...0jdvWOGDTA5Pd9xosPXW1Ni6A
echter, volgens mij negeer je daarmee simpelweg de interrupt lijn, op het moment dat je dan je interrupts, aan het einde van je ISR, weer aan zet....
schiet niet op, daarom moet je aan het einde van je interrupt altijd de interrupt lijn resetten (OUT naar de juiste poort), althans, zo werkt het op de Z80 (8 bit CPU van onder andere de gameboy en ti-83+/84)
Dit gaat overigens niet op volgorde van binnenkomst maar op volgorde van waar de vector zit.
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
hangt f van de gebruikte code. SIGNAL() of ISR() negeren inkomende interrupts, en deze worden op volgorde van prioriteit afgehandeld nadat de macro klaar is. Bij INTERRUPT(), is het mogelijk de macro te 'interrupten'.LED-Maniak schreef op donderdag 03 juni 2010 @ 20:35:
[...]
Als er bij een AVR een interrupt wordt getriggert en uitgevoerd en er komt een andere dan blijft de interrupt flag staan. Vervolgens is na het afhandelen van de huidige interrupt de volgende aan de beurt.
Dit gaat overigens niet op volgorde van binnenkomst maar op volgorde van waar de vector zit.
Ctrl+k
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
Als eerste test moet je de tv aansluiten direct op de wandcontactdoos waar je kabel de woning binnenkomt - het AOP Abbonnee-Overname-Punt. Met een korte en gegarandeerd goede kabel.Mr_gadget schreef op donderdag 03 juni 2010 @ 19:20:
Ik heb hier nog een oude crt tv staan die heel erg sneeuwt. ......Het tv signaal hier in de flat schijnt ook wel zwakt te zijn.
Hoe is het beeld dan? (controleer alle zenders).
[ Voor 121% gewijzigd door ThinkPad op 05-06-2010 19:03 ]
We hebben Bluetooth werkend gekregen en mijn partner in crime heeft een VB6.0-progsel gemaakt dat laat zien wat de dc/dc converter ons vertelt. Ik ben vergeten een screenshot te maken, maar dat komt zsm wel. Het komt erop neer dat we via de computer kunnen zeggen hoeveel stroom en/of spanning hij moet gaan maken, en dan doet hij dat en geeft feedback over hoe warm hij is, wat de batterijspanning en uitgangsspanning is, uitgangsstroom en alle informatie die verder nog nodig is.
Performance is ook geweldig, uit een Kokam 8Ah 8C celletje kunnen we met gemak ~40-50W trekken, en dat met één fase (de andere fasen moeten nog gefikst worden). Zonder koeling wordt hij dan wel erg warm, dus we hebben een speciaal heatspreadertje gefreesd dat als interface voor een groter koelblok kan dienen.
Dus, nu nog de andere fasen laten werken, automatisch fasen aan- en uitschakelen, de control loop verbeteren (hij wil nog wel eens over de zeik gaan met een sterk inductieve belasting) en dan hebben we spoedig een portable 150W labvoeding die je met je computer, pda of telefoon kunt bedienen
(we hebben gemerkt dat bluetooth zodanig veel makkelijker is dan een schermpje+knopjes dat de volgende versie gewoon helemaal geen schermpje meer krijgt).
edit: en we zijn live...
[ Voor 3% gewijzigd door mux op 06-06-2010 19:53 ]
Ik vind Hack a day tegenwoordig namelijk behoorlijk in kwaliteit achteruit gegaan.
(uitgezonderd als Sprite er weer eens opstaat hé!
[ Voor 14% gewijzigd door mace op 06-06-2010 16:13 ]
Hackedgadgets is altijd wel grappig...mace schreef op zondag 06 juni 2010 @ 16:13:
Kent iemand nog een beetje een leuke elektronica/hacking blog? Zoals Hack a day?
Ik vind Hack a day tegenwoordig namelijk behoorlijk in kwaliteit achteruit gegaan.
(uitgezonderd als Sprite er weer eens opstaat hé!)
Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog
Join the dark side, we have cookies :)
You need only two tools. WD-40 and duct tape. If it doesn't move and it should, use WD-40. If it moves and shouldn't, use the tape.
Hij word dan dacht ik als 'condensator' gebruikt en de tijd wordt gemeten dat het duurt voordat de LED opgeladen is.
[ Voor 18% gewijzigd door LED-Maniak op 08-06-2010 00:22 ]
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
Hmm, misschien moet ik mijn site eens her-inrichten: als ik zelf ook al moeite heb met zaken terug te vinden heb ik misschien teveel artikels voor de oorspronkelijke indeling...
Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog
Stel dat ik een PWM Dimmer maak met een fet als open collector geschakeld waarbij de led's dus tussen de +12Volt zitten en de fet. Moet ik dit dan beveiligen tegen kortsluiting en overcurrent?
Wat gebeurt er bijvoorbeeld met een fet waar teveel stroom door loopt, vliegt dat spontaan in de fik(rook heb ik er al eens uit zien komen.. vuur nog niet) of kan ik er van uit gaan dat die poort dan gewoon stuk gaat en klaar?
Ik weet dat je voor de CE richtlijn je apparaat brandveilig moet maken. Maar tot hoe ver moet ik doorgaan? poly-/multifuses bij elke poort?
Een temperatuur sensor wil ik sowieso op de print plaatsen om dat in de gaten te houden.
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
Waar en hoeveel je moet zekeren en in hoeverre je brandveiligheid moet bewijzen ligt helemaal aan je ontwerp en de normen die je hanteert.
Infant schreef op maandag 07 juni 2010 @ 11:20:
Hackedgadgets is altijd wel grappig...
Thanks, ik zal ze eens checken.Sprite_tm schreef op maandag 07 juni 2010 @ 13:24:
http://www.uelectronics.info/ is ook wel leuk, maar updatet niet echt enorm vaak.
Hackaday vind ik echt stukken minder de laatste tijd, veel simpele dingen, en het commentaar wat ze erbij schrijven is vaak ook echt suf.
Ben ik de enige die er zo over denkt?
Held! Via een link kwam ik op dit type scherm:Sprite_tm schreef op maandag 07 juni 2010 @ 13:24:
http://www.uelectronics.info/ is ook wel leuk, maar updatet niet echt enorm vaak.
http://www.vandijkenelekt...ies_id=23&products_id=125
Grafisch 122x32, monochroom, SED1520, 1 euro!
Dat is weer net zo'n typische aanbieding als de Baco-led-matrices
Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog
Verder vroeg ik mij af of het gebruikelijk is om voor 115V een extra winding parallel te gebruiken welke niet (elektrisch) aangesloten is op de andere windingen (en dus ook geen condensatoren bevat). De motor bevat namelijk 2 motor windingen. De ene bevat condensatoren terwijl de andere helemaal los hangt. Deze is niet elektrisch verbonden met de andere.
[ Voor 29% gewijzigd door lemming_nl op 08-06-2010 19:40 ]
Geluk is een weerloos oud vrouwtje, alleen op straat met een bom geld

Philips TL-D hoogfrequent ballastje, 4 stuks voor 1 euro gescoord op eBay
Straks worden deze gebruikt voor verlichting van mijn verlaagd plafond boven de bank. Dan heb ik er nog 2 over, die ga ik denk ik nog ombouwen tot mobiele armaturen (gestuurd met DMX512) voor filmopnames.
Zet het daar maar neer! -- It's time to party like it's 1984 -- Soundcloud
De condensators staan in serie met de wikkelingen, ze krijgen daarom niet de volle netspanning over zich.lemming_nl schreef op dinsdag 08 juni 2010 @ 17:54:
Vraagje, ik heb een elektromotor. Deze motor bevat 2 condensatoren, 20uF en 180uF. Een loop en start condensator. De 20uF condensator is gemaakt voor 400V~, de 180uF voor 120V~. Is dit gebruikelijk? Kan hier weinig informatie over vinden. Mij lijkt dat die 120V~ condensator kapot gaat. Maar deze motor heeft wel gedraait op 230V (in een apparaat welke ik niet heb). Lijkt me sterk dat er al die tijd een verkeerde condensator in heeft gezeten?
Verder vroeg ik mij af of het gebruikelijk is om voor 115V een extra winding parallel te gebruiken welke niet (elektrisch) aangesloten is op de andere windingen (en dus ook geen condensatoren bevat). De motor bevat namelijk 2 motor windingen. De ene bevat condensatoren terwijl de andere helemaal los hangt. Deze is niet elektrisch verbonden met de andere.
I fell with my reet in the prikkeldreed. How do I frommel my hand in the cookiestrommel? The sun is shining over het randje van de heining. I'm shocking klem between de deuren van de tram.
Staan die aanloop condensatoren niet vaak parallel aan een wikkeling?
Over het serie/parallel
Het doel van de condensators is om een fasedraaiing in de stroom te maken tussen twee wikkelingen. Hiervoor moet de condensator wel in serie staan.
Door deze fasedraaiing krijgt het magnetisch veld binnen de motor een draaiende component. Dit is een benadering van het ideale draaiende veld in een 3-fasenmotor. Zonder deze draaiende component krijg je een magneetveld dat op en afbouwt in één richting. In stilstand wekt dit geen koppel op.
I fell with my reet in the prikkeldreed. How do I frommel my hand in the cookiestrommel? The sun is shining over het randje van de heining. I'm shocking klem between de deuren van de tram.
Hmmm juist ja. Makes sensegoeievraag schreef op zondag 13 juni 2010 @ 01:02:
Hoe groter de condensator, hij kleiner de impedantie. De kleinere condensator krijgt hier de meeste spanning, daarom heeft deze een hogere werkspanning. (En misschien een stukje veiligheid, omdat deze permanent onder spanning staat)
Make sense too. Die denkstap heb ik gemist.Over het serie/parallel
Het doel van de condensators is om een fasedraaiing in de stroom te maken tussen twee wikkelingen. Hiervoor moet de condensator wel in serie staan.
Jep dat wist ikDoor deze fasedraaiing krijgt het magnetisch veld binnen de motor een draaiende component. Dit is een benadering van het ideale draaiende veld in een 3-fasenmotor. Zonder deze draaiende component krijg je een magneetveld dat op en afbouwt in één richting. In stilstand wekt dit geen koppel op.
Bedankt voor de uitleg
Ik weet dat een buienversterker kan gaan oscilleren, met alle gevolgen van dien.
Nu weet ik echter niet exact waardoor dat komt (terugkoppeling via de uitgangstrafo's richting buizen?).
Daarom mij nvraag: kan je een pre-amp (dus zonder UGTs) zonder belasting laten draaien? Bij een eindversterker heb je dan forse kans op schade, maar geldt dat ook voor een preamp?
Het doorslaan van een onbelaste eindversterker komt door opslingeren van de primaire spanningenBoudewijn schreef op zondag 13 juni 2010 @ 23:05:
Even iets heel anders:
Ik weet dat een buienversterker kan gaan oscilleren, met alle gevolgen van dien.
Nu weet ik echter niet exact waardoor dat komt (terugkoppeling via de uitgangstrafo's richting buizen?).
Daarom mijn vraag: kan je een pre-amp (dus zonder UGTs) zonder belasting laten draaien? Bij een eindversterker heb je dan forse kans op schade, maar geldt dat ook voor een preamp?
op de UGT. Een preamp zonder UGT heeft daar geen last van en kan zonder probleem onbelast aangesloten worden. Alleen even in de gaten houden dat een DC pad voor een eventuele uitgangselco wel zo prettig is. Dat voorkomt knallen als je er een eindtrap aan hangt.
weet iemand misschien een boek, of een webpagina waar zat info op staat om dit te leren? ik wil dan bijv. leren hoe je een oscillator maakt en dan ook een stabiele. dus wat je bijv. kan doen om een stabiele & ruisvrije FM transmitter te maken. ik wil dus de hele theorie erachter weten ipv. klakkeloos iets overnemen en niet snappen waarom het wel/niet werkt.
ik heb zometeen ~8 weken vakantie, heb ik mooi weer een projectje om aan te werken
[ Voor 6% gewijzigd door oddish2211 op 14-06-2010 10:10 ]

16 char, starburst, erg leuke dingen
Prijs inclusief shipping is ~3 euro per stuk.
Heb er 25 aangeschaft (indien intresse, DM maar ofzo), als ze op zijn koop ik er wel weer meer, verkoper heeft nog een flinke voorraad (alleen per 25 te kopen overigens).
Nu ben ik van plan om de meeste hiervan door te verkopen, met controller.
Nu is dankzijn Sprite_TM het aanturen van zo'n ding vrij simpel.
Alleen nu ben ik aan het twijfelen wat voor controller ik erop moet zetten.
- I2C: Zit in bijna alles, makkelijk af te tappen, makkelijk te adsressen, maar zonder kennis moeilijk te gebruiken.
- UART: Lastig met adressering, behalve op een µC niet direct aan sluiten, kan wel met een max485 makkelijk op lange afstand bedient worden.
- Raw data/clock: Laat de koper er maar een µC aan knopen die het display aanstuurt
- USB: Makkelijk voor een leek, verder eigenlijk alleen nadelen qua prijs, componenten, aansluitbaarheid op losse controllers etc.
Aangezien ik er de nodige ga verkopen vandaar een poll:
Poll: Welke aansturing
• I2C met 3-4 address pinnen
• UART
• Raw clock/data pinnen
• USB
• Anders (geef aan wat dan)
Tussenstand:
Ook een poll maken? Klik hier
Daarnaast heeft usb als erg groot nadeel dat het niet voor andere doeleinden gebruikt kan worden dan aan een computer koppelen.
Daarnaast is I2C ook aan een computer te knopen op een paar dozijn locaties.
2nd best zijn voor mij i2c en usb eigenlijk
Join the dark side, we have cookies :)
You need only two tools. WD-40 and duct tape. If it doesn't move and it should, use WD-40. If it moves and shouldn't, use the tape.
Een goedkope AVR kan alles (USB, I2C én UART)
If you do not change direction, you may end up where you are heading
Komt idd een AVR op.
Alleen meerdere protocollen in 1 chip implementeren is best lastig.
I2C en UART zou nog wel lukken, daar niet van, maar ook USB erbij wordt nogal krap.
Daarnaast is het erg lastig om een software USB implementatie goed werkend te krijgen onder Windows (USB-CDC op USB1 is een hack, Direct USB heb je.libusb nodig wat neit werkt op 64 bit, USB-HID is erg leuk maar megaveel werk om goed werkend te krijgen)
Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
Op XP,Vista en 7 heb je WinUSB, soort libusb maar dan van microsoft zelf, al gesigned en wel dus werkt ook op 64-bit zonder rare trucs. Heb er een tijdje terug een .NET wrapper voor geschreven (bestaan er wel meer overigens) en werkt prima.SA007 schreef op maandag 14 juni 2010 @ 22:14:
(USB-CDC op USB1 is een hack, Direct USB heb je.libusb nodig wat neit werkt op 64 bit, USB-HID is erg leuk maar megaveel werk om goed werkend te krijgen)
Verwijderd
Dit topic is gesloten.
![]()