Version 1
							
								
								
									
										
											BIN
										
									
								
								QC2_adapter_board_ATTiny.fzz
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,89 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					   ATTiny 13 Quick Charge 2.0 Powerbank Adapter Board
 | 
				
			||||||
 | 
					   Author: dustinbrun
 | 
				
			||||||
 | 
					           licensed under CC BY 4.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   Version 03.2022
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const int J1 = 4;
 | 
				
			||||||
 | 
					const int Dp_2k2 = 0;
 | 
				
			||||||
 | 
					const int Dp_10k = 1;
 | 
				
			||||||
 | 
					const int Dn_10k = 2;
 | 
				
			||||||
 | 
					const int load = 3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool active_9V = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void setup()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  delay(500);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  pinMode(load, OUTPUT);
 | 
				
			||||||
 | 
					  pinMode(J1, INPUT_PULLUP);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  blink_load(2, 100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Quickcharge Init
 | 
				
			||||||
 | 
					  pinMode(Dn_10k, INPUT);
 | 
				
			||||||
 | 
					  pinMode(Dp_2k2, INPUT);
 | 
				
			||||||
 | 
					  pinMode(Dp_10k, OUTPUT);
 | 
				
			||||||
 | 
					  digitalWrite(Dp_10k, HIGH);
 | 
				
			||||||
 | 
					  delay(2000);
 | 
				
			||||||
 | 
					  pinMode(Dn_10k, OUTPUT);
 | 
				
			||||||
 | 
					  digitalWrite(Dn_10k, LOW);
 | 
				
			||||||
 | 
					  delay(500);
 | 
				
			||||||
 | 
					  // End of Quickcharge Init
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  digitalWrite(load, HIGH);
 | 
				
			||||||
 | 
					  delay(500);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if (digitalRead(J1) == LOW) //Jumper is set, Output 9V
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    // Quickcharge set 9V
 | 
				
			||||||
 | 
					    pinMode(Dp_2k2, OUTPUT);
 | 
				
			||||||
 | 
					    digitalWrite(Dp_2k2, HIGH);
 | 
				
			||||||
 | 
					    digitalWrite(Dn_10k, HIGH);
 | 
				
			||||||
 | 
					    // End of Quickcharge set 9V
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    blink_load(2, 500);
 | 
				
			||||||
 | 
					    active_9V = true;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else  //Jumper is not set, Output 12V
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    // Quickcharge set 12V
 | 
				
			||||||
 | 
					    pinMode(Dp_2k2, OUTPUT);
 | 
				
			||||||
 | 
					    digitalWrite(Dp_2k2, LOW);
 | 
				
			||||||
 | 
					    digitalWrite(Dn_10k, HIGH);
 | 
				
			||||||
 | 
					    // End of Quickcharge set 12V
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    blink_load(1, 500);
 | 
				
			||||||
 | 
					    active_9V = false;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void loop() 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  delay(3000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (active_9V)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    blink_load(2, 1000);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    blink_load(1, 1000);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void blink_load(int x, int delaytime)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  for (int i = 0; i < x ; i++)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    digitalWrite(load, HIGH);
 | 
				
			||||||
 | 
					    delay(delaytime);
 | 
				
			||||||
 | 
					    digitalWrite(load, LOW);
 | 
				
			||||||
 | 
					    delay(delaytime);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								QC2_adapter_board_ATTiny_Leiterplatte.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 59 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								QC2_adapter_board_ATTiny_Schaltplan.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 121 KiB  | 
							
								
								
									
										280
									
								
								README.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										84
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,84 @@
 | 
				
			|||||||
 | 
					# ATTiny13 Quick Charge 2.0 Powerbank Adapter Board
 | 
				
			||||||
 | 
					A small adapter board which emulates a Quick Charge 2.0 (also compatible with Quick Charge 3.0) compatible device to force a power supply or a power bank to output higher voltages. Additionally this board generates a base load to prevent power banks from switching off automatically, if there is not enough load on the output.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<img src="pictures/QC2_adapter_board_ATTiny_front.jpg" width="350px">
 | 
				
			||||||
 | 
					<img src="pictures/QC2_adapter_board_ATTiny_back.jpg" width="300px">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Quick Charge 2.0 specification
 | 
				
			||||||
 | 
					To trigger the Quick Charge feature a special init routine must be run through. I have tried this routine from different sources (which are linked down below) but all of them did not work with all my Quick Charge power supplies. So I tried to create my own routine, which was inspired by the instructions given in the TPS61088 datasheet (Page 6+7). This routine works just fine with all my Quick Charge power supplies.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					After this initialization the output Voltage can be configured by applying different voltage levels to the USB data lines D+ and D-:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<img src="pictures/usb-pinout.webp" width="500px">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Voltage Levels:
 | 
				
			||||||
 | 
					| D+        | D-        | output voltage    |
 | 
				
			||||||
 | 
					| --------  | --------  | --------          |
 | 
				
			||||||
 | 
					| 0,6V      | 0,0V      |  5V (default)     |
 | 
				
			||||||
 | 
					| 3,3V      | 0,6V      |  9V               |
 | 
				
			||||||
 | 
					| 0,6V      | 0,6V      | 12V               |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					With this board the output voltage can be configured BEFORE startup using a jumper. The output configuration is shown by the LED attached in parallel to the load resistors:
 | 
				
			||||||
 | 
					- Jumper is set during startup: output 9V, LED flashes 2 times each cycle
 | 
				
			||||||
 | 
					- Jumper is not set during startup: output 12V, LED flashes 1 time each cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Hardware
 | 
				
			||||||
 | 
					## Schematic
 | 
				
			||||||
 | 
					<img src="QC2_adapter_board_ATTiny_Schaltplan.png" width="700px">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## PCB Layout
 | 
				
			||||||
 | 
					<img src="QC2_adapter_board_ATTiny_Leiterplatte.png" width="300px">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## ATtiny-Pinout
 | 
				
			||||||
 | 
					<img src="pictures/attiny-pinout.png" width="40%">
 | 
				
			||||||
 | 
					<br>(Source: https://cdn.sparkfun.com/assets/f/8/f/d/9/52713d5b757b7fc0658b4567.png)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Software
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Program the ATtiny
 | 
				
			||||||
 | 
					### 1. Upload `ArduinoISP` sketch to the Arduino
 | 
				
			||||||
 | 
					   You can find it in the Examples folder of the Arduino-IDE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 2. wiring
 | 
				
			||||||
 | 
					   I use a Arduino Nano to program the ATtiny, but also a Arduino UNO will do fine. Hook up the ATtiny like it is shown in the schematic:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   <img src="pictures/Program_ATtiny_Steckplatine.png" width="50%">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   The capacitor is important because it prevents the Arduino from resetting itself while programming the ATtiny.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 3. Download ATtiny13 support for the IDE
 | 
				
			||||||
 | 
					   Add the URL `http://drazzy.com/package_drazzy.com_index.json` to the Additional Boards Manager URLs in the IDE Preferences. After that open the Boards-Manager, search for "DIY Attiny" and install it. Now you should find the Attiny13 and some other Attiny Boards in the Board menu.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 4. Uploading
 | 
				
			||||||
 | 
					  Open the code in the Arduino IDE and select the Attiny13 as the Board.
 | 
				
			||||||
 | 
					  Select the following settings:
 | 
				
			||||||
 | 
					  <br><img src="pictures/ide_settings.png" width="40%">
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  It is important to set "Arduino as ISP" (**NOT Arduino ISP**) as the programmer. 
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					   **After that Press `Burn Bootloader` to make sure that these Settings are applied.**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   Now you can upload the code by simply pressing **Upload**.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Sources
 | 
				
			||||||
 | 
					- For the init routine: TPS61088 datasheet (Page 6+7) https://www.ti.com/lit/ug/tidu917/tidu917.pdf
 | 
				
			||||||
 | 
					- Voltages levels to configure the output: https://www.mouser.com/datasheet/2/328/chiphy_family_datasheet-269468.pdf
 | 
				
			||||||
 | 
					- USB pinout: https://www.electroschematics.com/wp-content/uploads/2010/01/usb-pinout.jpg
 | 
				
			||||||
 | 
					- other tested init routine + schematic inspiration: https://create.arduino.cc/projecthub/PSoC_Rocks/hacking-qualcomm-quick-charge-qc-2-0-3-0-with-attiny85-b7627d
 | 
				
			||||||
 | 
					- other tested init routine: https://github.com/septillion-git/QC2Control
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<br>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### I hope you like this project!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<br>
 | 
				
			||||||
 | 
					<p xmlns:dct="http://purl.org/dc/terms/" xmlns:cc="http://creativecommons.org/ns#" class="license-text">This work by <span property="cc:attributionName">Dustin Brunner</span> is licensed under <a rel="license" href="https://creativecommons.org/licenses/by/4.0">CC BY 4.0<img style="height:15px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1" /><img style="height:15px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1" /></a></p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons Lizenzvertrag" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/88x31.png" /></a><br />Dieses Werk von <span xmlns:cc="http://creativecommons.org/ns#" property="cc:attributionName">Dustin Brunner</span> ist lizenziert unter einer <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Namensnennung 4.0 International Lizenz</a>.
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								pictures/Program_ATtiny_Steckplatine.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 159 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								pictures/QC2_adapter_board_ATTiny_back.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 225 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								pictures/QC2_adapter_board_ATTiny_front.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 147 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								pictures/attiny-pinout.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 49 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								pictures/ide_settings.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 31 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								pictures/usb-pinout.webp
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 25 KiB  |